2011-02-01 24 views
7

¿Cómo puedo tomar una fecha almacenada, como 2011-01-30 18:23:49, y ajustarla a cualquier zona horaria elegida? ¿Hay una manera simple como simplemente definir el huso horario por abreviación o sumar/restar x cantidad de horas? Básicamente, quiero que los usuarios puedan elegir su zona horaria y que esta fecha predeterminada se ajuste a la suya.ajustar la zona horaria

+1

posible duplicado de [Ajuste de zona horaria en PHP con DateTime/DateTimeZone] (http://stackoverflow.com/questions/1445087/adjusting-time-zone-in-php-with-datetime-datetimezone) –

Respuesta

7
  1. que el usuario elija su zona horaria

  2. utilizar ese nombre de la zona o el desplazamiento con date_default_timezone_set para establecer la zona horaria predeterminada usada en funciones de fecha en el resto de la ejecución del script.

  3. Uso date('Z') para conseguir que la zona de horario en función del GMT en segundos

  4. Convertir la fecha almacenada a una marca de tiempo con strtotime - marcas de tiempo UNIX siempre son GMT, por lo que ahora tiene el tiempo en GMT.

  5. Agregue el desplazamiento del paso 3 para convertir ese tiempo a la zona horaria del usuario.

  6. Use date nuevamente para formatear la marca de tiempo como una cadena en el formato de visualización deseado.

Ejemplo:

$user_timezone = 'America/Los_Angeles'; 
$stored_time = '2011-01-30 18:23:49'; 

date_default_timezone_set($user_timezone); 
$timestamp = strtotime($stored_time); 
$local_timestamp = $timestamp + date('Z'); 
$local_date = date('Y-m-d H:i:s', $local_timestamp); 

echo $local_date; 
0

Aquí viene mi solución. Lo probé con America/Los_Angeles como la zona horaria de los servidores, y mi zona horaria como usuarios. Supongo que la hora se almacena utilizando la zona horaria de los servidores.

<?php 
// My (user) timezone 
$user_timezone = 'Europe/Berlin'; 

// Server timezone 
$stored_timezone = 'America/Los_Angeles'; 

// Date/Time stored in your DB, using timezone of the server (yours, that is) 
$stored_datetime = '2011-01-29 22:40:00'; // this is the current time in L.A. 

// Setting default to servers timezone if not done before 
date_default_timezone_set($stored_timezone); 

// converting to unix timestamp 
$stored_timestamp = strtotime($stored_datetime); 

// setting default to users timezone 
date_default_timezone_set($user_timezone); 

// converting to timestamp 
$user_datetime = date('Y-m-d H:i:s', $stored_timestamp); 

// setting default back to servers timezone 
date_default_timezone_set($stored_timezone); 

echo $user_datetime; // output is my current time 
Cuestiones relacionadas