2010-05-14 43 views
2

我目前在數據庫中使用'time()'函數存儲時間。但是,它使用的是服務器的時區,我希望每個用戶根據其時區(在其配置文件中設置)查看時間。PHP:如何將服務器時間戳轉換爲用戶的時區?

如何進行時間戳轉換? (我的意思是從時間戳到時間戳,而不是可讀的時間)

回答

9

正如Joonas說,UNIX時間戳被定義UTC,但你可以破解這樣的事情一起模仿特定的時區,時間戳,如果你真的需要:

// PHP 5.3 - OO Code 
$timestamp = time(); 
echo 'Unix timestamp: ' . $timestamp; 
$dt = DateTime::createFromFormat('U', $timestamp); 
$dt->setTimeZone(new DateTimeZone('America/New_York')); 
$adjusted_timestamp = $dt->format('U') + $dt->getOffset(); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 

// PHP 5.3 - Procedural Code 
$timestamp = time(); 
echo 'Unix timestamp: ' . $timestamp; 
$dt = date_create_from_format('U', $timestamp); 
date_timezone_set($dt, new DateTimeZone('America/New_York')); 
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 
+0

謝謝,但我得到這個錯誤'調用未定義的方法DateTime :: createfromformat()'。它怎麼說它沒有被定義? – KeyStroke 2010-05-14 13:42:06

+0

你使用的是什麼版本的PHP? – Mike 2010-05-14 13:47:27

+3

此代碼可能需要PHP 5.3 – 2010-05-14 13:50:22

1

UNIX時間戳在UTC中定義,這意味着所有轉換都應該在打印之前完成,而不是用實際時間戳完成。

如何做到這一點取決於你如何格式化他們目前。我相信PHP有內置的時區處理。

+0

發現我發現了一些功能,但它們都沒有時間戳本身轉換爲不同的時區。我在數據庫的時間戳上做了很多操作,因此在輸出時間的每個實例中反覆指定時區有點過分。 – KeyStroke 2010-05-14 13:31:05

2

真的不應該被盜號的時間戳他們自己要更改日期,您應該在將格式化的日期戳記呈現給用戶之前將時區應用於時間戳。

這是麥克的代碼修改後的版本應該針對PHP 5的工作> = 5.2.0 作爲php.net

// OO Code 
$st = 1170288000 // a timestamp 
$dt = new DateTime("@$st"); 
$dt->setTimeZone(new DateTimeZone('America/New_York')); 
$adjusted_timestamp = $dt->format('U') + $dt->getOffset(); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 

// Procedural Code 
$st = 1170288000 // a timestamp 
$dt = date_create("@$st"); 
date_timezone_set($dt, timezone_open('America/New_York')); 
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 
相關問題