當使用PHP DateTime
類並嘗試設置DateTimeZone
時,根據我的設置,我得到了不同的結果:使用DateTime::__construct
或使用DateTime::setTimezone
方法。PHP日期時間時區 - 構造器vs安裝員方法
這裏有一個例子:
$date = '2014-08-01'
$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP');
// 2014-08-01T00:00:00-07:00
$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP');
// 2014-07-31T17:00:00-07:00
我已經環顧四周,並沒有發現解決比php docs: datetime.settimezone和書下注釋等這些特殊的行爲充分的解釋php|architect's Guide to Date and Time Programming: Dealing with Timezones - DateTimeZone。
該註釋指出,DateTime::setTimezone
方法將更改特定時間點(時間戳)的時區,但Unix時間戳保持不變。
另一方面,DateTime::__construct
DateTimeZone參數用於「用用戶定義的一個覆蓋當前的默認時區」Chapter 3: Dealing with Timezones - DateTimeZone。
除了這些之外,關於這個主題(我能找到)沒有太多的東西。
這是我想知道的內容:
- 的這兩種方式我應該使用
DateTime::__construct
當我應該使用設置時區 - 設置時區
- 進一步解釋
DateTime::setTimezone
設置時區 - 使用一個vs另一個或如何使用它們的明顯示例
在構造函數中有一個時區意味着'$ date'在該時區;設置時區會根據建築時區和給定時區之間的差異來移動日期。 – 2014-09-04 09:58:08