Plop,
J'ai deux suggestions.
Ma première est de suggérer l'utilisation de l'objet PHP 5.2 "DateTime" (voir les fonctions de gestion de dates sur la doc PHP) à la place de la gestion des dates conventionnelles avec PHP (elles permettent, par exemple, de dépasser les intervalles UNIX)...
Et, aussi, de supprimer le champ "is_dst", pour l'imposer comme il se faut (car les pays utilisant ce changement d'horaire suivent une règle particulière - eh non, c'est pas du pif - : Le passage à l'heure d'été a lieu tous les derniers dimanches du mois de mars, à 1h du matin, heure UTC / GMT - appelez ca comme vous voulez -, et le passage à l'heure d'hiver le dernier dimanche d'octobre, à 1h du matin, toujours à l'heure UTC. Donc un simple calcul PHP (simple à faire, je le poste en bas si nécessaire), et on en parle plus
Voici une class étendant DateTime, qui fait, je pense, ce qui peut être utile :
Voili voilou...
J'ai deux suggestions.
Ma première est de suggérer l'utilisation de l'objet PHP 5.2 "DateTime" (voir les fonctions de gestion de dates sur la doc PHP) à la place de la gestion des dates conventionnelles avec PHP (elles permettent, par exemple, de dépasser les intervalles UNIX)...
Et, aussi, de supprimer le champ "is_dst", pour l'imposer comme il se faut (car les pays utilisant ce changement d'horaire suivent une règle particulière - eh non, c'est pas du pif - : Le passage à l'heure d'été a lieu tous les derniers dimanches du mois de mars, à 1h du matin, heure UTC / GMT - appelez ca comme vous voulez -, et le passage à l'heure d'hiver le dernier dimanche d'octobre, à 1h du matin, toujours à l'heure UTC. Donc un simple calcul PHP (simple à faire, je le poste en bas si nécessaire), et on en parle plus

Voici une class étendant DateTime, qui fait, je pense, ce qui peut être utile :
PHP (Sélectionner le code)
<?php class Date extends DateTime { /** * Modifie la date * * @param integer $hour * @param integer $minute * @param integer $second * @param integer $month * @param integer $day * @param integer $year * @return void */ public function set($hour = null, $minute = null, $second = null, $month = null, $day = null, $year = null){ $hour = $hour === null ? parent::format('G') : $hour; $minute = $minute === null ? parent::format('i') : $minute; $second = $second === null ? parent::format('s') : $second; $month = $month === null ? parent::format('n') : $month; $day = $day === null ? parent::format('j') : $day; $year = $year === null ? parent::format('Y') : $year; $this->setDate($year, $month, $day); $this->setTime($hour, $minute, $second); } /** * Affiche le timestamp UNIX * * @return integer */ public function unix(){ return $this->format('U'); } /** * Retourne si on est en horaire d'été (DST) ou non * (Suit la politique des horaires GMT : http://docs.php.net/manual/fr/function.gmmktime.php#47605) * * @return boolean */ public function is_dst(){ $compare = new DateTime('01:00:00', new DateTimeZone('UTC')); $is_dst = false; // -- A-t-on dépassé l'heure d'été ? $compare->setDate($this->format('Y'), 4, 1); $compare->modify('Last Sunday'); $is_dst = $this >= $compare; // -- Est-on toujours à l'heure d'été ? $compare->setDate($this->format('Y'), 11, 1); $compare->modify('Last Sunday'); $is_dst = $is_dst && $this < $compare; return $is_dst; } }
Voili voilou...








