RedBeanPHP - R::isoDateTime() - 如何设置时区?
RedBeanPHP - R::isoDateTime() - How to set timezone?
RedBeanPHP ORM 中有一个方便的函数可以用来设置日期。
$time = R::isoDateTime();
如何设置时区?
默认函数不returnRB 运行开启的机器时间。
从阅读 the source code 看来,R::isoDateTime()
只是一种方便的方法。它只是调用 PHP time()
函数,然后使用 date
函数将结果格式化为字符串。
我没有测试它,但理论上 - date_default_timezone_set
函数应该可以工作。例如:
date_default_timezone_set('America/Los_Angeles');
正如 Matt 指出的那样,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,但 can/will 根据其当前设置在各种时区显示其 timestamp without a time zone
类型(又名 timestamptz
) timezone
设置。例如:如果设置了 Europe/Paris,则为 2017-09-05T18:49:16+02:00,如果设置了 UTC,则为 2017-09-05T16:49:16+00:00(两者指的是同一时间.)
(我喜欢 RedBean,但还没有在任何地方看到它。希望这会对某人有所帮助。)
RedBeanPHP ORM 中有一个方便的函数可以用来设置日期。
$time = R::isoDateTime();
如何设置时区?
默认函数不returnRB 运行开启的机器时间。
从阅读 the source code 看来,R::isoDateTime()
只是一种方便的方法。它只是调用 PHP time()
函数,然后使用 date
函数将结果格式化为字符串。
我没有测试它,但理论上 - date_default_timezone_set
函数应该可以工作。例如:
date_default_timezone_set('America/Los_Angeles');
正如 Matt 指出的那样,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,但 can/will 根据其当前设置在各种时区显示其 timestamp without a time zone
类型(又名 timestamptz
) timezone
设置。例如:如果设置了 Europe/Paris,则为 2017-09-05T18:49:16+02:00,如果设置了 UTC,则为 2017-09-05T16:49:16+00:00(两者指的是同一时间.)
(我喜欢 RedBean,但还没有在任何地方看到它。希望这会对某人有所帮助。)