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; }