天天看點

php 國際标準時間_關于時區:PHP date_default_timezone_set()東部标準時間(EST)

長話短說

是否存在PHP5在東部标準時間内識别的官方未棄用時區 - 而不是東部日光時間?

短篇小說:-P

哇,我無法相信PHP會因為設定時間而産生這樣的群集。

我想使用PHP5的date_default_timezone_set()來設定我的腳本的時區。我想用标準時間。我不希望我的腳本觀察夏令時。我不想每次程式寫入時都使用gmtime()并減去60 * 60 * 5秒。我也不想将該值儲存到變量中。設定預設時區更加優雅,使腳本更易于移植到其他伺服器和區域設定。

不幸的是,PHP要求我在設定預設時區時使用其中一個愚蠢的"官方時區"。有一個"America / New_York",但我不知道它或任何官方PHP時區是否遵守夏令時。通過實驗,我發現"America / New_York"确實觀察到了DST。"美國/巴拿馬"是美國東部時間,是以沒有觀察到夏令時......但是,如果巴拿馬未來應該改變他們對夏令時的看法呢? (他們在1908年觀察到DST)

因為巴拿馬總能改變主意;我隻想使用GMT或UTC偏移量。

然後有這個......

http://us.php.net/manual/en/timezones.others.php

我假設的上述連結清單是不推薦使用的時區。"EST"在那裡但是以美國為中心,是以我了解為什麼它被棄用了。"Ect / GMT-5"也在那裡,我完全不知道為什麼會被棄用。如果你問我,所有的地名時區應該被棄用,GMT時區也不推薦......但是得到這個......"Ect / GMT-5"實際上是錯的!我不得不使用"Ect / GMT + 5"來獲得美國的東部标準時間。我很确定我不會在東海岸的英格蘭前5小時。

回答?

沒有人真正回答這個問題。是以我想我會自己回答。"不,PHP5認可東部标準時間沒有,沒有棄用的時區"

很多人告訴我,我應該将日期存儲為UTC時間,并将它們轉換為當地時間,當我将它們從存儲中取出時 - 我已經知道了。問題是,我被雇用隻修複腳本的這一小部分而且我懷疑這個人是否會讓我重新編寫他自PHP開始以來一直在使用的整個代碼。

我會不情願地向那些向您展示如何正确存儲和檢索時間的家夥表示贊賞,以便将來尋找這個的人學習如何以正确的方式做到這一點。

有時候你隻需要試圖并使用你不應該"應該"的東西。 我建議使用'US / Eastern',但我不知道是否包括DST。 UTC / Etc肯定不會

強制EST的目的是什麼? 也許有一種更好的解決問題的方法。

必須使用EST。 我無法通路腳本的其餘部分。 我是一個承包商,繼承了php5中某人的舊php4錯誤。

你想要做的事情是不實際的,會導緻你的使用者讨厭你。

命名時區背後的全部原因是準确地表示當地時間。将"标準"時間表示為本地區域在DST内的本地時間是客觀上不正确的。在該時區内讀取時間的任何人都會被誤導。

如果您需要存儲和使用忽略時區的日期和時間,則使用UTC進行此目的,即存儲和普通數學。值得記住的是,即使是優秀的舊Unix時間戳也是"1970年1月1日午夜過夜"。

如果您需要表示使用者本地的時間,那麼您應該允許他們選擇他們的本地時區,并在顯示時進行轉換。現代PHP的DateTime和DateTimeZone使這簡單。從互動式提示:

php > $utc = new DateTimeZone('UTC');

php > $amla = new DateTimeZone('America/Los_Angeles');

php >

php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);

php > $two_past_midnight->setTimeZone($amla);

php > echo $two_past_midnight->format('Y-m-d H:i:s');

2011-04-04 17:02:00

沒有亂,沒有大驚小怪。當我們切換時區時,它為我們完成了數學運算。

或者,如果你真的,真的,真的想要縮小DST時區,請結合getTransitions和getOffset以及各種時區date()格式,特别是I。您可以檢視并生成結果資訊,以查找下一個DST區域的"标準"版本何時轉換并相應地進行調整。請記住,不同的區域在不同的時間過渡,并非所有區域都轉換相同的數量......有些區域根本不會過渡。我覺得有人提到過印第安納州。

通常我也會在這裡提供示例代碼,但是日期數學讓我對暴力的永不滿足的渴望。無論誰決定60,60,24,7,4-6,6和52是可以接受的思考時間和日期的方式,都是邪惡的,邪惡的人。值得慶幸的是,他們已經死了幾百到幾千年。

能夠在代碼中顯示我試圖用英語解釋的+1

我100%同意你的意見。我總是以UTC格式存儲時間并轉換為本地時間。但是,我正在為用戶端編寫部分腳本,并且無法通路該站點的其餘部分。他們決定使用EST(不遵守DST)來存儲他們所有的時間。是以,當我發現将預設時區設定為東部标準時間時非常困難。這就像它從PHP地圖上消失了。我想在美國沒有任何地方再觀察GMT-5(EST)時間。非常感謝,非常感謝。

他們如何繞過"标準"到"日光"的自動轉換?不同的技術堆棧?史前的PHP?如果你遇到困難,可以考慮回歸普通的舊Unix時間戳,而不是使用現代的DateTime系統。如果你可以說服PHP它在UTC中運作,你可以手動從它那裡手動進行5小時減法而不會有太多麻煩。

他們不是邪惡的人,對于古代人(如發明現代時間系統的蘇美爾人)來說,在12年代做數學運算從根本上說更容易。

啊,但這不是問題的十二點,它是7s和4-6s和29-31s以及所有其他非标準的不均勻可分的廢話......

echo ' Format ' . date('m/d/Y H:i:s a') ;

//maketime function- mktime(hour,minute,second,month,day,year,is_dst)

$EasternTimeStamp =mktime(date('H')-6,date('i'),date('s'),date("m"),date("d"),date("Y"));

// date function- date(format, timestamp)

echo 'Format ' . date('m/d/Y H:i:s a',$EasternTimeStamp) ;

America/New_York确實觀察到DST并且是推薦的時區。 (我去年參加了一次會議,其中寫了很多日期/時間代碼的Derick Rethans發言。)區域時區背後的想法是他們遵守他們所表示的城市/地區的時區規則(這就是為什麼有7個印第安納時區)。

我不喜歡DST。我想要标準時間。 :-(

對不起,我誤解了你的那部分問題。如果您反對使用已棄用的時區,我建議使用UTC并手動添加您想要的偏移量。你有沒有理由想避免讓我失蹤的DST?

好吧,如果你真的想在UTC日期之前或之後X小時,我會這樣做:

$now = gmdate('Y-m-d H:i:s', time() - 3600 * $hours);

在你的情況下,$hours将是5,我想。

正如其他人所建議的那樣,包括我自己,這不是一個好習慣...但你知道這一點。

也許這就是你說的你不想做的事情。您使用gmtime,也許您的意思是gmdate。無論如何,如果您想確定腳本以這種方式工作,這是我将使用的方法。将其包裝到類似standard_date()的函數中,從配置中讀取$hours。

您應該始終使用UTC存儲時間,這是time()傳回的時間,然後根據伺服器的位置設定時區,如果适用,将為DST更新時區。

time()并不真正使用UTC。它隻是自固定時間點以來的秒數(确實恰好基于UTC)。但我同意通過gmdate()或time()存儲日期通常是最好的方法。

我同意。時間應僅存儲為UTC。但我隻是一個小工蜂更新别人的腳本,沒有權限更新網站的其餘部分。是以我希望把時間寫成EST而不是EDT。謝謝。