DateTime对象上的不同timezone_types

2021/01/30 09:41 · php ·  · 0评论

我在Postgres上使用Doctrine2。在一张表格中,我有两种不同的日期类型:birthdate:datecreated_at:datetimetz两者都成为DateTime对象,但具有不同的timezone_type以下是清单:

created_at datetimetz:

DateTime Object
(
    [date] => 2013-04-18 11:54:34
    [timezone_type] => 1
    [timezone] => +02:00
)

birthdate 日期:

DateTime Object
(
    [date] => 1970-01-01 00:00:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

我需要以相同的方式格式化对象。两者都应该有timezone_type=3

我该如何实现?

时区可以是DateTime对象中三种不同的类型之一:

  • 类型1; UTC偏移量,例如new DateTime("17 July 2013 -0300");
  • 类型2; 时区缩写,例如new DateTime("17 July 2013 GMT");
  • 类型3:时区标识符,例如 new DateTime( "17 July 2013", new DateTimeZone("Europe/London"));

只有附加了类型3时区的DateTime对象才能正确使用DST。

为了始终具有类型3,您将需要将时区作为该列表中的可接受标识符存储在数据库中,并在实例化时将其应用于DateTime对象。

我知道这是一篇古老的文章,但是自从提到教义以来,我觉得有必要分享我最近在此问题上的经验。

@vascowhite是正确的,但是关于通过HTTP发送到服务器(例如,保存)的Doctrine日期(至少在我的配置中)是转换的时区类型2。Doctrine会正确处理它们并正确保存日期,但不会转换时区类型。

如果要执行“保存并返回新值”类型的操作,请注意,Doctrine将使用缓存的值(带有timezone_type 2)。当您期望timezone_type 3像通常在页面重新加载期间获得的那样时,这变得很重要。我们有一个自定义的日期转换器JS类,该类需要timezone_type 3,但无法对其进行转换。诚然,日期转换器应该考虑到这一点,但也应注意时区类型将是“教义”中最后加载的值。保存后清除Doctrine的缓存将强制使用timezone_type 3重新加载数据。

本文地址:http://php.askforanswer.com/datetimeduixiangshangdebutongtimezone_types.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!