2010-01-06 67 views
1

我迷惑自己到一個點,我需要仔細檢查這與你所有。對不起,如果這真的是一個愚蠢的問題..也許一個愚蠢的問題在時區

好吧 - 我有一個PHP Web應用程序運行在Linux上,需要支持時區。我提供了一個日曆小部件,允許用戶設置他們的時區,然後爲某個事件選擇日期和小時/分鐘。

然後,我通過使用將該值作爲int存儲在記錄中。當我需要再次向用戶顯示日期時,我只需要設置他們的時區並應用於int值。

代碼:

$dtzone = new DateTimeZone($time_zone); 
$dtime = new DateTime($date_time, $dtzone); 
$timestamp = $dtime->format('U'); 
return $timestamp; 

注: $ DATE_TIME談到這種格式 'YYYY-MM-DD H:S' $ TIME_ZONE是他們選擇如:美國/牙買加

現在我存儲數據庫中返回的int。

然後我有一個PHP腳本,我通過在悉尼 - 澳大利亞服務器上運行的CRON執行。

我的理解是,我的腳本需要做的是通過time()獲取服務器當前時間戳,然後在time()調用中搜索數據庫中的所有整數。我不必擔心用戶用於選擇日期/時間的時區。

請注意,CRON必須每分鐘運行一次,因爲我允許用戶選擇分鐘。

這個假設是否正確?

乾杯

馬克

回答

1

如果要存儲的時間戳爲整數,那麼你最有可能使用的UNIX時間戳它們總是UTC。無論生成的地方如何,unix時間戳都是一樣的。無論是牙買加,悉尼還是火星。

+0

感謝邁克 - 它讓所有關於UTC,GMT和偏移量的討論變得混亂。我認爲我們都使用魔法1970 Unix時間集合中的相同「時間流」,所以當使用該代碼將時間轉換爲int時,它代表了我們共享的確切時間點。 – zanis 2010-01-06 01:51:58

+0

這正是unix時間戳代表的內容。 UTC代表所有時區改變的「協調世界時間」(即Etc/GMT-5)。 UTC是基礎,因此是unix時間戳的最合適的時間標準。 – 2010-01-06 02:59:36

+0

你好, 我想知道如果有人知道如何處理以下 - 繼續我的時間戳傳奇。 當用戶選擇的日期/小時/分鐘的時間戳保存到數據庫時,秒數被設置爲00-我假設爲00,因爲當我將時間戳轉換回日期格式時秒數爲00。 因此,我可以有1262746260的時間戳。 看看linux cron日誌我可以看到CRON實際上在一分鐘後運行1秒。因此,當服務器上爲比較搜索生成當前時間戳時,整數可以至少爲1秒。 – zanis 2010-01-06 03:25:45