PHP中时间戳和时区,PHP:时区数据是否以某种方式嵌入到时间戳中?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值