【发布时间】:2009-06-04 20:42:18
【问题描述】:
我将日期存储在 MySQL 数据库中的 UTC 日期时间字段中。我正在使用 PHP,并且我调用了 date_timezone_set('UTC') 以便所有对 date() 的调用(没有时间戳)都以 UTC 格式返回日期。
然后我拥有它,以便给定的网站可以选择其时区。现在我希望日期显示在站点的时区中。因此,如果我将日期存储为“2009-04-01 15:36:13”,它应该在 PDT 时区(-7 小时)中为用户显示为“2009-04-01 08:36:13” .
通过 PHP 执行此操作的最简单(最少代码)的方法是什么?到目前为止,我想到的只是
date('Y-m-d H:i:s', strtotime($Site->getUTCOffset() . ' hours', strtotime(date($utcDate))));
有没有更短的方法?
【问题讨论】:
-
单线有什么问题?
-
没什么,如果这是标准的做法。如果有更简单的东西,我只是不想在我的代码库中粘贴几十个地方。
-
不是你要求的,但以防万一:记得设置 MySQL 时区。或者 MySQL 会自行转换日期。见:dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
-
phpphil,它会怎么做呢? DATETIME 字段应该与时区无关。您是说 MySQL 将使用系统的时区和 NOW() 和 CURDATE() 等函数吗?我已将 --timezone=UTC 添加到 MySQL 的 my.cnf。
-
手册说:“当前会话时区设置会影响对区域敏感的时间值的显示和存储。这包括由 NOW() 或 CURTIME() 等函数显示的值,以及在 TIMESTAMP 列中存储和检索的值。TIMESTAMP 列的值从当前时区转换为 UTC 以进行存储,并从 UTC 转换为当前时区以进行检索。使用 my.cnf 中的条目,它应该可以正常工作!