56 votes

Convertir l'heure et la date d'un fuseau horaire à un autre en PHP

Fondamentalement, ce dont j'ai besoin, c'est d'un script qui, lorsqu'il est fourni avec une heure et un fuseau horaire, peut renvoyer l'heure dans un autre fuseau horaire.

Mes principaux problèmes sont :

  • D'où obtenir le décalage horaire par rapport à l'heure GMT - existe-t-il une base de données publique disponible pour cela ?
  • Comment prendre également en considération les différences d'heure d'été (DST).
  • Comment bien envelopper le tout dans une classe PHP - ou existe-t-il déjà une telle classe ?

119voto

ITroubs Points 4570
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

Les exemples ci-dessus afficheront :

 2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45

trouvé sur DateTime Manual sur php.net

ÉDITER: Comme Pekka l'a dit : La classe DateTime existe à partir de la 5.2 et là, vous devez d'abord savoir quelles méthodes sont réellement implémentées et lesquelles n'existent qu'à partir de la 5.3.

21voto

Shubham Mathur Points 311

essaie ça, ça peut aider :)

 function converToTz($time="",$toTz='',$fromTz='')
    {   
        // timezone by php friendly values
        $date = new DateTime($time, new DateTimeZone($fromTz));
        $date->setTimezone(new DateTimeZone($toTz));
        $time= $date->format('Y-m-d H:i:s');
        return $time;
    }

Une petite description : La fonction prend 3 entrées, le temps de conversion, le fuseau horaire vers lequel convertir, le fuseau horaire actuel et renvoie la sortie dans le format spécifié.

3voto

srp Points 571

Je sais qu'il est tard. Pour tous ceux qui voudraient une fonction simple pour convertir utc en n'importe quel fuseau horaire local

 function UTCTimeToLocalTime($time, $tz = '', $FromDateFormat = 'Y-m-d H:i:s', $ToDateFormat = 'Y-m-d H:i:s')
{
if ($tz == '')
    $tz = date_default_timezone_get();

$utc_datetime = DateTime::createFromFormat($FromDateFormat, $time, new
    DateTimeZone('UTC'));
$local_datetime = $utc_datetime;

$local_datetime->setTimeZone(new DateTimeZone($tz));
return $local_datetime->format($ToDateFormat);
}

 echo UTCTimeToLocalTime('2015-07-01 13:30:00','America/Denver');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X