2011-02-01 60 views
7

我如何將存儲的日期,如2011-01-30 18:23:49,並調整到任何選定的時區?有沒有簡單的方法,例如簡單地通過縮寫或加/減x小時來定義時區? 基本上我希望用戶能夠選擇他們的時區,並調整這個默認日期以適合他們的時區。調整時區

+1

[調整的時區PHP和日期時間/ DateTimeZone]的可能重複(http://stackoverflow.com/questions/1445087/adjusting-time-zone-in-php-with-datetime-datetimezone) – 2011-02-01 06:09:54

回答

7
  1. 讓用戶選擇自己的時區

  2. 使用該區域名稱或抵消date_default_timezone_set設置在整個腳本執行的其他日期函數的默認時區。

  3. 使用date('Z')來獲取時區與格林尼治標準時間以秒

  4. 將您保存的日期與strtotime時間戳偏移 - UNIX時間戳總是GMT,所以你現在在GMT時間。

  5. 添加步驟3中的偏移量,將該時間轉換爲用戶的時區。

  6. 再次使用date將時間戳格式化爲所需顯示格式的字符串。

例子:

$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

這纔是我的解決方案。我使用America/Los_Angeles作爲服務器時區和我的時區作爲用戶進行了測試。我假設時間是使用服務器時區存儲的。

<?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