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

Posted

技术标签:

【中文标题】RedBeanPHP - R::isoDateTime() - 如何设置时区?【英文标题】:RedBeanPHP - R::isoDateTime() - How to set timezone? 【发布时间】:2017-05-04 13:54:17 【问题描述】:

RedBeanphp ORM 中有一个方便的函数来计算日期。

$time = R::isoDateTime();

如何设置时区?

默认函数不返回运行RB的机器的时间。

【问题讨论】:

【参考方案1】:

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

我没有测试它,但理论上 - date_default_timezone_set 函数应该可以工作。例如:

date_default_timezone_set('America/Los_Angeles');

【讨论】:

是的。我使用 date_default_timezone_set【参考方案2】:

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

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

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

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


在 MySQL 下:

您可能正在使用没有任何时区信息的datetime,而R::isoDateTime() 就可以了。


但使用 Postgres 时要注意:

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

这应该会有所帮助:

查看 Postgres 的默认时区:SHOW timezone;。 要更改 Postgres 角色(用户)的默认时区:ALTER ROLE myuser SET timezone = 'Europe/Paris';。 我建议将 Postgres 的默认时区设置为您想要的 - 为了安全起见。但是,最好在使用时间时明确指出时区。这将避免您的时间在您打算将其置于特定时区时意外地被解释为 UTC。因此,您可能想要使用@date( 'c' ) 之类的东西,而不是无时区的R::isoDateTime(),例如:2017-09-05T18:49:16+02:00。

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

(我喜欢 RedBean,但在任何地方都没有看到这方面的内容。希望这会对某人有所帮助。)

【讨论】:

以上是关于RedBeanPHP - R::isoDateTime() - 如何设置时区?的主要内容,如果未能解决你的问题,请参考以下文章

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

redbeanphp 坏顺序

RedBeanPHP:Find 中的值不起作用

RedBeanPHP、NotORM 和 DibiPHP。这些简单的 ORM 中哪一个是最好的? [关闭]

在 RedBeanPHP 中使用 FOR 循环

RedBeanPHP中具有两列主键的表