date_default_timezone_set("Asia/Singapore"); // UTC +8
$dt = new DateTime();
$dt->setTimestamp(DateTime::createFromFormat('u', gmdate('u'))->getTimestamp());
echo $dt->getTimezone()->getName(); // Asia/Singapore
echo $dt->format('d M Y H:i:s'); // Correct local time
$dt->setTimezone(new DateTimeZone('UTC'));
echo $dt->format('d M Y H:i:s'); // Correct UTC Time
die;
我想知道时间戳是否包含时区数据.在第3行上,您看到我使用了gmdate(),它应该给我UTC / GMT时间.但是当我得到时区&格式化的日期时间,它们是本地时间.我尚未在DateTime对象中设置时区,而是为其设置了UTC时间戳.它以某种方式知道转换为本地时间.这让我想知道时间戳中是否包含时区数据
解决方法:
setTimestamp接受GMT 0中的时间戳,由于gmdate(‘u’),您在GMT中将其传递了.默认情况下,DateTime对象采用您当前的时区.
之后,您已经正确设置了时间戳和当前时区,这就是DateTime对象格式化新加坡日期的原因.
Which makes me wonder if Timezone data are included in timestamps
否.时间戳记仅存储自unix-epoch以来的秒数.
标签:timezone,datetime,php
来源: https://codeday.me/bug/20191105/1995532.html