簡體   English   中英

PHP DateTime格式不尊重時區?

[英]PHP DateTime Format does not respect timezones?

所以我有以下代碼:

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime(date('r', 1440543600), $timezone);

echo $datetime->format('l, F j, Y - h:i A e');

這輸出如下:

2015年8月25日星期二 - 晚上11:00 +00:00

你會認為它會輸出:

2015年8月25日星期二 - 07:00 PM -04:00

如何使用設置的時區正確輸出格式?

閱讀DateTime::__construct()的文檔,其中第二個參數說明:

注意:當$ time參數是UNIX時間戳(例如@ 946684800)或指定時區(例如2010-01-28T15:00:00 + 02:00)時,將忽略$ timezone參數和當前時區。

基於此,在使用unix時間戳創建時,在DateTime對象上設置時區:

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime('@1440543600');
$datetime->setTimezone($timezone);

演示

我認為問題不在於您輸出日期的方式,而在於您輸入日期的方式。 'r'格式選項包括時間偏移。

如果使用沒有偏移量的字符串創建DateTime對象,則將獲得預期結果。

$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime("2015-08-20 01:24", $timezone);

echo $datetime->format('l, F j, Y - h:i A e');

$datetime->setTimezone(new DateTimeZone('America/Chicago'));
echo "\n";
echo $datetime->format('l, F j, Y - h:i A e');

/* outputs

Thursday, August 20, 2015 - 01:24 AM America/New_York
Thursday, August 20, 2015 - 12:24 AM America/Chicago

*/

請看這里的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM