php - servidor - Cadena de fecha/hora UTC a zona horaria
utc gmt (6)
¿Cómo convierto una cadena de fecha / hora (por ejemplo, 2011-01-01 15:00:00) que es UTC a cualquier soporte de php de zona horaria dado, como America / New_York, o Europe / San_Marino?
Asumiendo que el UTC no está incluido en la cadena, entonces:
date_default_timezone_set(''America/New_York'');
$datestring = ''2011-01-01 15:00:00''; //Pulled in from somewhere
$date = date(''Y-m-d H:i:s T'',strtotime($datestring . '' UTC''));
echo $date; //Should get ''2011-01-01 10:00:00 EST'' or something like that
O podrías usar el objeto DateTime.
El objeto DateTime
de PHP es bastante flexible.
Dado que el usuario solicitó más de una opción de zona horaria, entonces puede convertirla en genérica.
Función genérica
function convertDateFromTimezone($date,$timezone,$timezone_to,$format){
$date = new DateTime($date,new DateTimeZone($timezone));
$date->setTimezone( new DateTimeZone($timezone_to) );
return $date->format($format);
}
Uso:
echo convertDateFromTimezone(''2011-04-21 13:14'',''UTC'',''America/New_York'',''Y-m-d H:i:s'');
Salida:
2011-04-21 09:14:00
Función de normalización de propósito general para formatear cualquier marca de tiempo de cualquier zona horaria a otra. Muy útil para almacenar marcas de datos de usuarios de diferentes zonas horarias en una base de datos relacional. Para comparaciones de bases de datos, almacene la marca de tiempo como UTC y use con gmdate(''Ymd H:i:s'')
/**
* Convert Datetime from any given olsonzone to other.
* @return datetime in user specified format
*/
function datetimeconv($datetime, $from, $to)
{
try {
if ($from[''localeFormat''] != ''Y-m-d H:i:s'') {
$datetime = DateTime::createFromFormat($from[''localeFormat''], $datetime)->format(''Y-m-d H:i:s'');
}
$datetime = new DateTime($datetime, new DateTimeZone($from[''olsonZone'']));
$datetime->setTimeZone(new DateTimeZone($to[''olsonZone'']));
return $datetime->format($to[''localeFormat'']);
} catch (/Exception $e) {
return null;
}
}
Uso:
$from = [''localeFormat'' => "d/m/Y H:i A", ''olsonZone'' => ''Asia/Calcutta'']; $to = [''localeFormat'' => "Y-m-d H:i:s", ''olsonZone'' => ''UTC'']; datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00"
Qué tal si:
$timezone = new DateTimeZone(''UTC'');
$date = new DateTime(''2011-04-21 13:14'', $timezone);
echo $date->format;
El objeto DateTime
de PHP es bastante flexible.
$UTC = new DateTimeZone("UTC");
$newTZ = new DateTimeZone("America/New_York");
$date = new DateTime( "2011-01-01 15:00:00", $UTC );
$date->setTimezone( $newTZ );
echo $date->format(''Y-m-d H:i:s'');
function _settimezone($time,$defaultzone,$newzone)
{
$date = new DateTime($time, new DateTimeZone($defaultzone));
$date->setTimezone(new DateTimeZone($newzone));
$result=$date->format(''Y-m-d H:i:s'');
return $result;
}
$defaultzone="UTC";
$newzone="America/New_York";
$time="2011-01-01 15:00:00";
$newtime=_settimezone($time,$defaultzone,$newzone);