<![CDATA[Forum Ubuntu-fr.org / [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?id=1161081 Tue, 08 Jan 2013 16:23:12 +0000 FluxBB <![CDATA[Réponse à : [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12133221#p12133221 Effectivement j'avais pas du tout pensée à réduire la durée à 12heures, il ferait des testes et je verrais quelle solution fonctionne le mieux. Dans la BDD il n'y a pas les heures/minutes/seconde. Je sais donc pas du tout ce que ça va donner.

]]>
Tue, 08 Jan 2013 16:23:12 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12133221#p12133221
<![CDATA[Réponse à : [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12133001#p12133001 J'ajouterais aussi que, si tu te bases sur la date en te disant que de toute façon l'heure, la minute et la seconde restent à zero, tu risque d'avoir des problèmes avec les secondes intercalaires.
http://fr.wikipedia.org/wiki/Seconde_intercalaire

Les jours où il y a une seconde intercalaire, la journée dure 86401 secondes et non 86400 secondes, avec ta soustraction tu te retrouves donc au jour précédent à 00:00:01 et non à 00:00:00.

Et si tu t'en fous complètement des champs "heure", "minute" et "seconde", ça voudrait dire qu'en plus de n'avoir pas de problème avec les secondes intercalaires tu n'aurais aucun souci non plus à soustraire 12 heures, 1 heure, 10 minutes ou 1 minute (*) au lieu de 24 heures, ce qui résoudrait également le problème qui t'a fait ouvrir ce fil de discussion smile

(*): mais surtout pas une seconde smile

]]>
Tue, 08 Jan 2013 16:03:59 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12133001#p12133001
<![CDATA[Réponse à : [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12132941#p12132941 Ah merde désolé. Saleté de nouvel an ! smile

Il s'agit en effet simplement du changement d'heure en fait ! Tu as le même comportement en 2012 le 25 mars, en 2014 le 30 mars...

Une proposition : tu peux réduire de 12 heures seulement, puis extraire uniquement les champs correspondant à la date en gardant les champs correspondant à l'heure à zero...

]]>
Tue, 08 Jan 2013 15:57:16 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12132941#p12132941
<![CDATA[Réponse à : [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12132871#p12132871 Bonjour,

C'est normal que tu ne rencontre pas cette erreur avec les dates que tu as rentrés étant donné que tu es resté en 2012 smile.  Il m'a fallut un bout de temps pour arriver à cerner le problème. En 2013 il n'y a que 23*3600 entre le 31/03 et le 04/01, le 31 étant le dernier dimanche de Mars.

J'ai élaboré cette fonction pour palier au problème :

function previousTime($mkDebut,$mkFin)
	{
		$result = 0;
		$mkday = 24*3600;
		$mkdiff = ($mkFin-$mkDebut)%$mkday;
		if($mkdiff == 0)
			{
				$result = $mkFin - $mkday;
			}
		else
			{
				$result = $mkFin - $mkdiff;
			}
		return $result;
	}

(Si il existe une solution plus simple je suis bien sûr preneur).
Cordialement.

]]>
Tue, 08 Jan 2013 15:50:21 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12132871#p12132871
<![CDATA[Réponse à : [PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12132191#p12132191 Je ne rencontre pas ce problème :

php > $date = mktime( 0, 0, 0, 04, 01, 2012);
php > echo date("Y-m-d", $date)."\n";
2012-04-01
php > echo date("Y-m-d", $date-86400)."\n";
2012-03-31
php > echo date("Y-m-d", $date-86401)."\n";
2012-03-30

Dans le cas en erreur, que donne :

echo date("Y-m-d H:i:s", $mkDateFin)."<br/>";

?

]]>
Tue, 08 Jan 2013 14:44:37 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12132191#p12132191
<![CDATA[[PHP] Probléme MkTime et décallage horraire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=12131411#p12131411 Bonjour à tous smile !

Voilà je me retrouve confronté à un problème avec les mktime, je vous explique mon soucis.

Je loue une chambre d'hote à la nuit, pour une ou plusieurs nuits. Je rentre donc dans ma bdd chaque jour où le client doit dormir dans ma chambre.

$mkday = 24*3600 // un jour en mktime
$mkdateDebut =  mktime( 0, 0, 0, $mkDateDebut[1], $mkDateDebut[2], $mkDateDebut[0] );
$mkDateFin =  mktime( 0, 0, 0, $mkDateFin[1], $mkDateFin[2], $mkDateFin[0]) -$mkday; //ici je soustrais un mkday car c'est la date où le client part, elle ne sera donc pas prise en compte dans ma BDD pour cette réservation.

/* aprés vérification des disponibilités */

for($i=$mkdateDebut; $i<$mkDateFin;$i+=$mkday)
  {
       /* je rentre ma résa */
  }

Le problème et qu'un client à voulut passer la nuit de 31 mars 2013 au 1er Avril 2013, et là surprise, gros bug ...

Lorsque je fais

echo date("Y-m-d", $mkDateDebut)."<br/>";
echo date("Y-m-d", $mkDateFin)."<br/>";

J'obtiens

2013-03-31
2013-03-30

par contre lorsque je fais ça :

$mkdateDebut =  mktime( 0, 0, 0, $mkDateDebut[1], $mkDateDebut[2], $mkDateDebut[0] );
$mkDateFin =  mktime( 0, 0, 0, $mkDateFin[1], $mkDateFin[2], $mkDateFin[0]) -23*3600;
echo date("Y-m-d", $mkDateDebut)."<br/>";
echo date("Y-m-d", $mkDateFin)."<br/>";

j'obtiens bien :

2013-03-31
2013-03-31

qui est le résultat que j'attends.

Ma question est donc simple après toutes ces explications, comment faire pour prévoir les futurs décalage horaire ? Car effectivement, j'ai testé et en 2014/2015 il n'y a aucun soucis avec cette date là.

Merci de votre attention et de vos potentielles réponses.

]]>
Tue, 08 Jan 2013 13:43:01 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=12131411#p12131411