¿Alguien puede sugerir un método fácil para convertir la fecha y la hora en diferentes zonas horarias en php?Conversión de zona horaria en php
Respuesta
Usted puede utilizar el objeto de fecha y hora o sus alias de función para esto:
Example (abridged from PHP Manual)
date_default_timezone_set('Europe/London');
$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');
Editar respecto a los comentarios
pero expecto utilizar este método porque Necesito mostrar la fecha en diferentes zonas horarias como el nosotros er inicio de sesión desde diferentes ubicaciones
Eso no es un problema. Cuando un usuario inicia sesión, usted determina su zona horaria y la establece en su objeto DateTime tal como se muestra. Estoy usando un enfoque similar en uno de mis proyectos y funciona como un encanto.
en la base de datos que necesito para obtener las fechas de cualquier sola zona horaria, entonces sólo se puede procesar correctamente
se almacena el tiempo, ya sea como una marca de tiempo o una fecha y hora en una zona horaria. Cuando consulta un campo DateTime, o bien convierte la hora en un objeto DateTime a esta zona horaria o, si su db lo admite, consulta con la zona horaria seleccionada.
Un método aún más simple se parece a esto:
date_default_timezone_set('Europe/London'); // your user's timezone
$my_datetime='2013-10-23 15:47:10';
echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));
Como se describe in the PHP manual, strtotime() acepta una zona horaria también, sólo hay que añadirlo a su fecha y hora.
Le recomiendo que almacene todas sus fechas en UTC porque de esa manera no tendrá problemas con el horario de verano.
Esto funcionó para mí y es bastante limpio también!
function convert_to_user_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));
$dateTime->setTimezone(new DateTimeZone($userTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
function convert_to_server_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));
$dateTime->setTimezone(new DateTimeZone($serverTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
//example usage
$serverDate = $userDate = '2014-09-04 22:37:22';
echo convert_to_user_date($serverDate);
echo convert_to_server_date($userDate);
DateTime::setTimezone -- date_timezone_set — Sets the time zone for the DateTime object
orientado objeto de estilo
<?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";
?>
Estilo por procedimientos
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
Los ejemplos anteriores sería:
2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45
<?php
$time='6:02';
$dt = new DateTime($time, new DateTimeZone('America/New_York'));
//echo $dt->format('Y-m-d H:i:s') . PHP_EOL;
$dt->setTimezone(new DateTimeZone('Asia/Kolkata'));
echo $dt->format('H:i') . PHP_EOL;
?>
// Convertir la fecha de una zona a otra. /* $ zone_from = 'Asia/Kolkata';
$zone_to='America/Phoenix';
date_default_timezone_set($zone_from);
$convert_date="2016-02-26 10:35:00";
echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);
*/
function zone_conversion_date($time, $cur_zone, $req_zone)
{
date_default_timezone_set("GMT");
$gmt = date("Y-m-d H:i:s");
date_default_timezone_set($cur_zone);
$local = date("Y-m-d H:i:s");
date_default_timezone_set($req_zone);
$required = date("Y-m-d H:i:s");
/* return $required; */
$diff1 = (strtotime($gmt) - strtotime($local));
$diff2 = (strtotime($required) - strtotime($gmt));
$date = new DateTime($time);
$date->modify("+$diff1 seconds");
$date->modify("+$diff2 seconds");
return $timestamp = $date->format("Y-m-d H:i:s");
}
UTC a lo local:
<?php
$datetime = date("Y-m-d H:i:s");
$utc = new DateTime($datetime, new DateTimeZone('UTC'));
$utc->setTimezone(new DateTimeZone('America/Sao_Paulo'));
echo $utc->format('Y-m-d H:i:s');
?>
Ninguna de estas respuestas trabajó para mí (me saltaba tratando código que era demasiado voluminosos en tamaño). También creo que es extraño cambiar la zona horaria predeterminada solo para una sola conversión.
Aquí está mi solución:
function changeTimeZone($dateString, $timeZoneSource = null, $timeZoneTarget = null)
{
if (empty($timeZoneSource)) {
$timeZoneSource = date_default_timezone_get();
}
if (empty($timeZoneTarget)) {
$timeZoneTarget = date_default_timezone_get();
}
$dt = new DateTime($dateString, new DateTimeZone($timeZoneSource));
$dt->setTimezone(new DateTimeZone($timeZoneTarget));
return $dt->format("Y-m-d H:i:s");
}
Por lo tanto, para convertir a los valores predeterminados del servidor, usted acaba de pasar una zona horaria:
changeTimeZone("2016-10-24 16:28", "Asia/Tokyo");
Convertir desde el servidor por defecto para el usuario, que dejaría el 2º parámetro nulo o en blanco:
changeTimeZone("2016-10-24 16:28", "", "Asia/Tokyo");
Y para cambiar a zonas horarias unre RELAClONADAS en el valor predeterminado, que le proporcionará 2 zonas horarias:
changeTimeZone("2016-10-24 16:28", "America/New_York", "Asia/Tokyo");
Parece que funciona muy bien! –
Buena respuesta. Prefiero try catch en lugar de is (empty) para evitar errores ortográficos en la cadena timezone. intente { nuevo DateTimeZone ($ timeZoneSource); } \t catch (Excepción $ e) { $ timeZoneSource = date_default_timezone_get(); } –
- 1. Python Zona horaria conversión
- 2. DataContractJsonSerializer DateTime implícita conversión de zona horaria
- 3. PHP zona horaria no configurada
- 4. ponerse en php - zona horaria emite
- 5. Conversión de la zona horaria de Nueva Zelanda en MySQL
- 6. Tiempo de conversión WCF basado en la zona horaria automáticamente
- 7. PHP zona horaria. ¿Dónde está mi ciudad?
- 8. Conversión de Olson TZID a la zona horaria de Windows
- 9. obtener usuario zona horaria
- 10. conversión de cadena hasta la fecha con zona horaria
- 11. Configuración zona horaria en Python
- 12. Ajuste de la zona horaria en PHP con DateTime/DateTimeZone
- 13. java incorrecta zona horaria
- 14. zona horaria por Coordinar
- 15. postgres zona horaria predeterminada
- 16. Java GregorianCalendar Zona horaria
- 17. Cambiar zona horaria en Tomcat
- 18. zona horaria local en Ruby
- 19. ajustar la zona horaria
- 20. Fecha de PostgreSQL() con la zona horaria
- 21. ¿Obtener la fecha actual, dada una zona horaria en PHP?
- 22. MYSQL establecer la zona horaria en el código PHP
- 23. MySQL cambio de zona horaria?
- 24. NSDatePicker rareza de zona horaria
- 25. Django: problema de zona horaria
- 26. ajuste predeterminado zona horaria no funciona a pesar de ser zona horaria válida
- 27. Problema de zona horaria en Android
- 28. Desfase de zona horaria local en PostgreSQL
- 29. iTunes Connect zona horaria confusión
- 30. ¿Qué zona horaria muestra Date.toString()?
gracias Gordon pero expecto utilizar este método porque tengo que mostrar la fecha en diferentes zonas horarias como el inicio de sesión de usuario desde diferentes lugares – raki
@raki: por lo que sólo cuando el usuario está conectado - configure date_default_timezone_set() con la zona horaria seleccionada del usuario adecuado. – zerkms
que tampoco es posible ... porque ... en la base de datos necesito obtener las fechas en cualquier zona horaria, entonces solo se puede procesar correctamente – raki