RedBeanPHP - R :: isoDateTime() - 如何设置时区?

时间:2017-05-04 13:54:17

标签: php datetime orm timezone redbean

RedBeanPHP ORM中有一个便利函数用于停止日期。

$time = R::isoDateTime();

如何设置时区?

默认功能不会返回运行RB的机器的时间。

2 个答案:

答案 0 :(得分:1)

从阅读the source code看来,R::isoDateTime()只是一种便捷方法。它只是调用PHP time()函数,然后使用date函数将结果格式化为字符串。

我没有对它进行测试,但理论上 - date_default_timezone_set函数应该有效。例如:

date_default_timezone_set('America/Los_Angeles');

答案 1 :(得分:0)

正如马特指出的那样,R::isoDateTime()只是一种便利功能。

在RedBean的所有版本中,我检查过(3.x,4.x),它被定义为:

@date( 'Y-m-d H:i:s', $time )`

即:没有任何时区信息的时间戳。例如:2017-09-05 18:49:16。

在MySQL下:

您可能在没有任何时区信息的情况下使用datetimeR::isoDateTime()也可以。

但在使用Postgres时请注意:

Postgres会在没有时区的情况下理解这些时间,就像在Postgres的时区(不是PHP的!)那样。即使你使用RedBean设置时间,你也可能会发现日期并不是你所期望的。

这应该有所帮助:

  • 查看Postgres的默认时区:SHOW timezone;
  • 更改Postgres 角色(用户)的默认时区:ALTER ROLE myuser SET timezone = 'Europe/Paris';
  • 我建议将Postgres的默认时区设置为您想要的 - 安全。但是,最好在每次处理时间时明确指出时区。这样可以避免在您意图将其置于特定时区时将您的时间解释为UTC。因此,您可能希望使用类似R::isoDateTime()的内容,而不是时区@date( 'c' ),例如:2017-09-05T18:49:16 + 02:00。

最后请记住Postgres将所有内容存储为UTC,但可以/将根据其当前设置{{1}在各种时区显示其timestamp without a time zone类型(AKA timestamptz) } 设置。例如:2017-09-05T18:49:16 + 02:00如果设置了欧洲/巴黎,但2017-09-05T16:49:16 + 00:00如果设置了UTC(两者都指同一时间。)< / p>

(我喜欢RedBean,但在任何地方都看不到这个。希望这对某人有帮助。)