2012-02-23 142 views
0

我有一個PHP系統運行,並使用CodeIgniter(如果有一個CI特定的答案,我會很高興)。使用strtotime並考慮時區

我經常需要找出諸如「本週四」或「本週一」等日期的時間戳。我目前使用strtotime("this Thursday"),它給了我所要求的。

我在EST有一臺服務器。 2012年2月24日星期五凌晨01:00(凌晨1:00)在紐約。

我有一個用戶指定他的時區爲太平洋時間。現在是2012年2月23日星期四晚上22點(晚上10點)在舊金山。我使用strtotime("this Thursday")。由於我的服務器位於EST,因此它會爲我返回2012年3月1日的時間戳。我想考慮用戶的時區。對於我的用戶,「本週四」應該返回2012年2月23日。

我可以使用strtotime("this Thursday")嗎?如果是這樣,我該如何指定目標時區?

如果不是,您會建議如何在特定時區獲取「本週四」的日期。

+0

您的服務器的日期是未來! – jon 2012-02-23 13:58:50

+0

絕對!我正在使用一個人爲的例子。很快就會過去。 – 2012-02-23 14:00:03

+0

好的,道歉。 – jon 2012-02-23 14:00:27

回答

1

我想通了,需要的strtotime一個$現在採取的參數字符串。我可以指定$ now參數爲用戶時區中的當前時間,並且strtotime返回我所需的值。

+0

雖然這適用於某些/大多數/ 99%以上的情況,但由於夏令時間的差異(不在同一日期)等原因,最好更改所處理的時區。只是改變時間有一些微小的不一致之處,但保持錯誤的時區。很少,而且根據用途,你可能永遠不會遇到它們,但仍然存在。 – Wrikken 2012-02-23 16:56:55

+0

它看起來像我的時間var中包含一個時區。當我打印出「T」組件時,它顯示了正確的用戶時區。 – 2012-02-24 17:35:21

+0

你很確定嗎?因爲這聽起來像你設置時區_somewhere_作爲'$ now'的輸入只是一個簡單的,簡單的整數.... – Wrikken 2012-02-24 17:40:39

0

這是從PHP網站

<?php 
date_default_timezone_set('Asia/Shanghai'); 

$first_day_of_month = date('Y-m',time()) . '-01 00:00:01'; 
$t = strtotime($first_day_of_month); 
print_r(array(
      date('Y-m',$t), 
      date('Y-m',strtotime('- 1 month',$t)), 
      date('Y-m',strtotime('- 2 month',$t)), 
)); 
?>