J'ai besoin d'un moyen simple de convertir un horodatage en UTC (quel que soit le fuseau horaire du serveur) HOPEFULLY sans utiliser aucune bibliothèque.
Réponses
Trop de publicités?Essayez les méthodes getTimezone et setTimezone , voir l'exemple.
(Mais cela utilise une classe)
METTRE À JOUR:
Sans cours, vous pouvez essayer quelque chose comme ceci:
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "<br />");
echo(date("Y-d-mTG:i:sz",$the_date) . "<br />");
echo(date_default_timezone_set("UTC") . "<br />");
echo(date("Y-d-mTG:i:sz", $the_date) . "<br />");
REMARQUE: vous devrez peut-être également redéfinir le fuseau horaire sur l'original.
Si vous avez une date dans ce format AAAA-MM-HH jj: mm: ss, vous pouvez tromper php en ajoutant un UTC à la fin de votre "chaîne de date / heure" et utiliser strtotime pour le convertir.
date_default_timezone_set('Europe/Stockholm');
print date('Y-m-d H:i:s',strtotime("2009-01-01 12:00"." UTC"))."\n";
print date('Y-m-d H:i:s',strtotime("2009-06-01 12:00"." UTC"))."\n";
Cela imprimera ceci:
2009-01-01 13:00:00
2009-06-01 14:00:00
Et comme vous pouvez le constater, il règle également le problème de l'heure d'été.
Un peu étrange moyen de le résoudre .... :)
Comme strtotime nécessite un format d’entrée spécifique, DateTime :: createFromFormat peut être utilisé ( php 5.3+ est requis )
// set timezone to user timezone
date_default_timezone_set($str_user_timezone);
// create date object using any given format
$date = DateTime::createFromFormat($str_user_dateformat, $str_user_datetime);
// convert given datetime to safe format for strtotime
$str_user_datetime = $date->format('Y-m-d H:i:s');
// convert to UTC
$str_UTC_datetime = gmdate($str_server_dateformat, strtotime($str_user_datetime));
// return timezone to server default
date_default_timezone_set($str_server_timezone);