2011-02-01 14 views
7

Jak mogę zapisać datę, np. 2011-01-30 18:23:49 i dostosować ją do wybranej strefy czasowej? Czy istnieje prosty sposób, taki jak proste określenie strefy czasowej za pomocą skrótu lub dodanie/odjęcie x ilości godzin? Zasadniczo chcę, aby użytkownicy mogli wybrać swoją strefę czasową, a ta domyślna data powinna być dopasowana do ich.Dostosuj strefę czasową

+1

możliwe duplikat [Regulacja strefę czasową, w PHP z DateTime/DateTimeZone] (http://stackoverflow.com/questions/1445087/adjusting-time-zone-in-php-with-datetime-datetimezone) –

Odpowiedz

7
  1. Czy użytkownikowi wybrać swoją strefę czasową

  2. użyć tej nazwy stref lub przesunięte date_default_timezone_set ustawić domyślną strefę czasową używaną w funkcji daty całej reszty wykonywania skryptu.

  3. użytkowania date('Z') aby ta strefa czasowa to GMT przesunięcie w sekundach

  4. Konwersja datę zapisaną w datownik z strtotime - znaczniki czasu UNIX są zawsze GMT, więc masz teraz czasu GMT.

  5. Dodaj przesunięcie od kroku 3, aby przekonwertować ten czas do strefy czasowej użytkownika.

  6. Ponownie użyj formatu date, aby sformatować znacznik czasu jako ciąg znaków w wybranym formacie wyświetlania.

Przykład:

$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

Nadchodzi moje rozwiązanie. Testowałem to z America/Los_Angeles jako strefą czasową serwerów i moją strefą czasową jako użytkownikami. Zakładam, że czas jest przechowywany za pomocą strefy czasowej serwerów.

<?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 
Powiązane problemy