private function DateTime() { $offset = 0; if ($this->valide === false) { return NULL; } else { if ($this->now === true) { $timeStamp = time(); } else { $dateTimeZoneEntree = new DateTimeZone($this->FuseauEntree()); $dateTimeEntree = new DateTime(); $dateTimeEntree->SetTimeZone(new DateTimeZone($this->FuseauEntree())); $dateTime = new DateTime(); $dateTime->SetTimeZone(new DateTimeZone('UTC')); $offset = $dateTimeZoneEntree->getOffset($dateTime) + $dateTimeEntree->getOffset(); // Offset entre le fuseau d'entrée et l'utc auquel on rajoute l'offset heure d'été. $timeStamp = mktime($this->Heures(), $this->Minutes(), $this->Secondes() - $offset, $this->Mois(), $this->Jour(), $this->Annee()); /*$dateTimeZoneEntree = new DateTimeZone($this->FuseauEntree()); $dateTimeZoneSortie = new DateTimeZone($this->FuseauSortie()); $dateTime = DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s', $timeStamp), $dateTimeZoneEntree); // Date avec le fuseau horaire d'entrée. $offset = $dateTimeZoneSortie->getOffset($dateTime) - $dateTimeZoneEntree->getOffset($dateTime) + $dateTime->getOffset(); // Différence entre le fuseau en sortie et celui en entrée + heures d'hiver/été. // Heures d'hiver et d'été. $timeStamp = mktime($this->Heures(), $this->Minutes(), $this->Secondes()+$offset, $this->Mois(), $this->Jour(), $this->Annee()); $dateTime = DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s', $timeStamp), $dateTimeZoneSortie); // Date avec le fuseau horaire de sortie.*/ } } if ($timeStamp !== false) { $dateTime = new DateTime(); $dateTime->SetTimeStamp($timeStamp); $dateTime->SetTimeZone(new DateTimeZone($this->FuseauSortie())); return $dateTime; } else { GLog::LeverException(EXG_0042, 'GLog::DateFormat, valeurs de date invalides [' . $this->Annee() . '-' . $this->Mois() . '-' . $this->Jour() . ' ' . $this->Heures() . ':' . $this->Minutes() . ':' . $this->Secondes() - $offset . '].'); return NULL; } }
public function TimeZone($decalage) { $languageTimeZones = self::LangueFuseaux(); $langagesAcceptes = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); $scores = array(); $scoreMax = 0; $fuseauHoraire = 'UTC'; $timeStamp = time(); $dateTime = new DateTime(); $dateTime->SetTimeStamp($timeStamp); $dateTime->SetTimeZone(new DateTimeZone('UTC')); // Pour chaque langue acceptée. while (list($i, $langage) = each($langagesAcceptes)) { $coeff = 1 - 0.1 * intval($i); $pos = stripos($langage, ';'); if ($pos !== false) { $langage = substr($langage, 0, $pos); } $langage = strtolower($langage); if (array_key_exists($langage, $languageTimeZones)) { $fuseaux = $languageTimeZones[$langage]; // Pour chaque fuseaux de la langue. while (list($i, $fuseau) = each($fuseaux)) { $dateTimeZone = new DateTimeZone($fuseau); // Si le décalage horaire est le même que celui passé en argument. if ($dateTimeZone->GetOffset($dateTime) == $decalage) { if (!array_key_exists($fuseau, $scores)) { $scores[$fuseau] = 0; } // Augmentation du score de probabilité du fuseau. $scores[$fuseau] += $coeff; // Si le score du fuseau devient le plus grand c'est le nouveau fuseau dominant. if ($scoreMax < $scores[$fuseau]) { $scoreMax = $scores[$fuseau]; $fuseauHoraire = $fuseau; } } unset($dateTimeZone); } } } unset($languageTimeZones); // Si on n'a pas trouvé un fuseau horaire par l'algo intelligent, on prend le premier qui correspond au décalage. if ($fuseauHoraire == 'UTC') { $fuseaux = timezone_abbreviations_list(); foreach ($fuseaux as $fuseau) { foreach ($fuseau as $ville) { if ($ville['offset'] == $decalage) { $fuseauHoraire = $ville['timezone_id']; return $fuseauHoraire; } } } } return $fuseauHoraire; }