php 输出时区,PHP输出本地时区调整后的DateTime

我的印象是PHP DateTime类的format()函数导出了最初传递的时间戳,并且应用了正确的偏移量.

我已经意识到这样做是没有意义的.因此,我希望将数据库中的时间戳(UTC)与用户的时区一起存储,并能够根据我是否需要UTC日期或用户时区调整日期来输出它.

我已经开始扩展DateTime类来执行此操作,但我想知道我是否在DateTime中的现有方法中缺少某些东西,或者为什么DateTime类以它的方式工作的思维过程.

据推测,我还需要一些静态工厂方法,它们可以采用时间戳,时区以及传入的时间戳是用户调整的时间戳还是UTC时间戳,并且能够进行必要的调整以实例化标准化的DateTime对象.传入时间的UTC版本.通过这种方式,我可以在UI和数据库周围抛出时间戳,并能够在它们之间进行适当的转换.

有更简单的方法吗?我见过date_default_timezone_set函数,但我想避免让该设置影响整个脚本,导致用户调整的时间存储在DB中.

(我将用户的时区存储在数据库中作为时区字符串,例如Europe / Berlin,从用户会话变量传入函数.我还打算将所有日期时间存储为UTC时间并保留服务器的php.ini也设置为UTC.)

解决方法:

您可以创建DateTime实例,指定它是UTC.然后使用setTimeZone()将其时区更改为用户的时区.

$datetime = new DateTime("2011-06-07 12:34:56", new DateTimeZone("UTC"));

$datetime->setTimeZone(new DateTimeZone("Europe/Berlin"));

echo $datetime->format(DateTime::RSS);

标签:php,timezone

来源: https://codeday.me/bug/20190614/1236913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值