2014-05-01 56 views
1

在我的Symfony 2项目中,我们需要使用日期和时间来存储各种信息。目前在数据库中,我们使用date作为列类型来存储所有这些信息。当信息首次存储在数据库中时,一切都会顺利进行。受DST影响的Symfony2和PHP,我如何阻止它影响我?

问题是,当我使用相同的表单类型修改信息时,数据在使用Doctrine发出merge后发生了变化。更糟糕的是,数据库信息,如果我修改它没有前端(使用UPDATE命令),存储没有任何问题,并且它应该显示它应该。

我在这个问题上已经研究了一下,这是因为Symfony在服务器的时区并将其应用于从视图到模型的转换期间的输入数据。 PHP通常会考虑DST,但是由于政治问题,PHP没有采用正确的DST结束日期(它应该在3月份结束,但在4月结束,PHP采用原始的3月日期),因此数据会相应地改变。

我该怎么做才能避免再发生这个问题?在我的国家,DST在过去的几年中有所变化,我不能相信我的电脑能够采用正确的日期。我想使它与时区无关。

  • 我应该如何在数据库中存储我的日期?
  • 我应该如何在Symfony项目中管理我的日期?

预先感谢您。

+0

我想你可以找到多个选项来设置或定义你的Symfony应用程序默认时区[http://www.epicfoobar.com/2013/10/how-to-set-time-zone-in-symfony2 /] – Javad

+0

问题是我的时区考虑DST。它认为的DST是政府日期变化的时间,我们不知道他们什么时候或者是否会改变时间。 PHP无法知道,因此系统容易出错。我已经在php.ini中设置了时区,因为它应该是不可变的,但是DST会抛出它,如果我试图在其他地方重新声明它,因为结果基本上是相同的,那么它就没用了。 –

+0

在这种情况下,您如何看待在应用程序中设置应用程序设置,以便您(管理员用户)能够根据政府决策选择应用程序的有效时区? – Javad

回答

1

为了有一个不变的PHP时区,总是在php.ini这样诉诸UTC:

;;;;;;;;;;;;;;;;;;; 
; Module Settings ; 
;;;;;;;;;;;;;;;;;;; 

... 

[Date] 
; Defines the default timezone used by the date functions 
; http://php.net/date.timezone 
date.timezone=UTC 

这将迫使PHP有一个时区,将永远不会尽管任何DST的变化而变化。