2012-05-19 88 views
0

要麼我失去了我的想法,要麼我沒有最明智的想法,我在做什麼。我傾向於後者。PHP日期/格林威治標準時間

我想轉換此:1316826000,我敢相信應該是週六,2011年9月24日01:00:00 GMT

http://www.onlineconversion.com/unix_time.htm證實了這一點。

http://www.unixtimestamp.com/index.php告訴我美國東部時間09/23/11 @ 8:00:00 pm,迄今爲止這麼好。我碰巧在EST,這是我想從PHP獲得的結果。我得到:2011年9月23日星期五上午12點,完整的20個小時後,我收到了一封電子郵件。

我已使用日期('c')確認服務器的時間是正確的。日期('c')輸出爲:2012-05-19T03:19:20 + 00:00。服務器位於當前下午10點20分的中央時區。 5月18日

回聲date_default_timezone_get()輸出 「GMT」(設置其他地方在使用腳本date_default_timezone_set( 'GMT'))

我缺少什麼?到目前爲止,我讀過的任何內容都可以解釋我如何得到20分鐘的結果。如果一個小時快或慢,我至少可以把頭繞在它身上,它是某種DST白癡,但是20? Crazyness!謝謝閱讀!

+0

你有沒有試過'date_default_timezone_set'你的時區到EST? – deceze

+0

1316826000可能會映射到美國東部時間晚上8點,但請注意,2011年9月23日,美國仍在觀察夏令時,因此實際使用的時區應該是EDT,而現在是晚上9點。 FWIW,我無法在PHP 5.3.5中重現這個問題:'print(date('l,M d,Y,h:ia',1316826000))'prints'2011年9月23日星期五晚上9點'。 –

回答

0

使用與Joda-Time 2.3庫一些Java代碼,因爲我不知道PHP ...

long m = 1316826000L; 

DateTime dateTimeUtc = new DateTime(m * 1000L, DateTimeZone.UTC); 
DateTime dateTimeNewYork = dateTimeUtc.toDateTime(DateTimeZone.forID("America/New_York")); 

System.out.println("dateTimeUtc: " + dateTimeUtc); 
System.out.println("dateTimeNewYork: " + dateTimeNewYork); 

我可以告訴你,從1970年UTC/GMT(Unix的時代)的開始1316826000秒是...

dateTimeUtc: 2011-09-24T01:00:00.000Z 
dateTimeNewYork: 2011-09-23T21:00:00.000-04:00 

所以,作爲評論者指出,這將是晚上8點在美國東部時間EST,但並沒有在這一天生效。 DST(Daylight Saving Time)(白癡,正如您正確指出的那樣)是當年(2011年)的in effect until November 9。所以一天的時間推遲了一個小時,直到晚上9點。

在GMT/UTC,這意味着第二天早上1點。

美國東海岸的標準時間比UTC/GMT晚5個小時。通過夏令時,它比UTC /格林威治標準時差4小時(更近一個小時)。

在那裏你糊塗了:不正確的

  • 時間格式/轉換。
    我不能幫助,因爲我不知道PHP。
  • 您應該使用勝任日期時間庫進行此類工作。
    日期時間工作複雜,棘手,易混淆且容易出錯。
    This question討論了用於PHP的Joda-Time(用於Java)各種庫的可能性。
  • 您使用了三字母時區代碼。避免這些
    這些代碼既不標準也不唯一 - 有共同的重複。相反,使用proper time zone names。以你的美國東海岸爲例,「America/New_York」。此外,在這種情況下,您將時區和規則(東海岸美國)與這些規則的特定應用(EST)混淆。說「America/New_York」是指「該日期的任何時區規則都是有效的,而說」EST「(如果解釋爲Eastern Standard Time in US)意味着」UTC-05:00「,所以要麼(a)使用時區名如「美國/紐約」,或(b)使用特定的偏移等。「-05:00」
1

檢查你的php.ini中說,對 date.timezone在UNIX它通常是在這裏:/etc/php.ini 然後使用由PHP認可的合適的時區: http://www.php.net/manual/en/timezones.php

date.timezone = 'America/New_York'

然後重新加載您的Web服務器。

Unix時間意味着自紀元以來的秒數。與時區無關。時區僅爲每個離開格林威治標準時間的區域添加或減去1小時(3600秒)的unix時間。 一個例子:

$userTimezone = new DateTimeZone('America/New_York'); 
$gmtTimezone = new DateTimeZone('GMT'); 
$myDateTime = new DateTime('2014-01-22 11:44', $gmtTimezone); 
$offset = $userTimezone->getOffset($myDateTime); 
echo $offset; 

也就是說將輸出:-14400或4小時。紐約和格林威治標準時差是什麼意思?

相關問題