2012-03-11 90 views
0

我有一個Web應用程序,允許用戶選擇具有在特定時間對特定工作日進行一定的操作(例如:晚上7點星期五) - 重複每個工作日。我的用戶位於不同的時區。因此,我想有一天/小時儲存在同一個時區的格式,以便它運行小時我的cron作業,可以查詢我的數據庫趕緊搶來執行所有任務,代表了該行小時。什麼是實現這一目標的最佳方式?PHP轉換工作日和時間(小時),GMT表示

基本上我需要知道如何採取 星期五下午7:00在馬薩諸塞州波士頓或星期六下午3:00加利福尼亞州舊金山,並轉換爲GMT(並在我的數據庫中存儲)。這樣,當我每小時運行一次我的cron作業時,我確切地知道查詢數據庫的價值是什麼,以給出它當前的GMT日/小時。

編輯1 通過玩弄我想出了:

date_default_timezone_set('America/New_York'); 
$time = strtotime('Friday 8:00pm'); 

echo date('w : G', $time); 
echo '<br>'; 

date_default_timezone_set('GMT'); 
$date = date('w : G', $time); 

echo $time; 
echo '<br>'; 
echo $date; 

輸出是:

5 : 20 
1331942400 
6 : 0 

基本上這是在正確的軌道?

EDIT 2 有用的細節,實際上,我很幸運地擁有存儲爲其中的一個我的用戶的時區信息: http://www.php.net/manual/en/timezones.php

+0

在情況下,用戶應在其時區選擇的時候,你可能[需要找出他們的時區](http://stackoverflow.com/questions/13/how-can-i-determine-a-web-users-time-zone)?更簡單的可能性是讓他們從GMT中選擇,然後用當地時間添加JS提示。 – Aufziehvogel 2012-03-11 08:23:38

+0

@aufziehvogel,我其實已經有了自己的時區。我玩過一個想法並將其添加爲編輯。 – 2012-03-11 08:25:46

+0

棘手。也許一個下拉/供用戶選擇,選擇時區,然後使用日期函數在PHP與UTC偏移返工,但你也必須允許夏令時間。例如我在GMT/UTC 0,但在月底​​,我們swithc英國夏季 – PurplePilot 2012-03-11 08:33:09

回答

2

如果您存儲用戶的時區已經,您可以添加GMT偏移到獲取GMT日期的時間。

我位於科羅拉多這是目前-7 GMT:

$offset = -7; 
$gmt = ($offset * 60 * 60) + time(); 

會給Unix時間戳爲GMT時區。

然後確保你的服務器有GMT爲默認或者設置時區,您可以使用設置時區:

date_default_timezone_set('GMT'); 
+0

問題在於,某些地區在夏令時期間會在一年中更改其GMT偏移。 – 2012-03-11 08:41:57

+1

'日期(「I」)'會給你一個1或0取決於當前夏令觀察。 – 2012-03-11 08:50:40