在 PHP/MySQL 中将日期时间存储为 UTC
我读到的关于将时间转换为用户时区的任何地方都说,最好的方法是以UTC格式存储日期和时间,然后只需将用户的时区偏移量添加到此时间即可。
如何以 UTC 时间存储日期?我使用MySQL DATETIME字段。
当我在我的PHP代码中向MySQL添加新记录时,我会用它来插入MySQL DATETIME。now()
我是否需要使用与存储 UTC 时间不同的内容?now()
我读到的关于将时间转换为用户时区的任何地方都说,最好的方法是以UTC格式存储日期和时间,然后只需将用户的时区偏移量添加到此时间即可。
如何以 UTC 时间存储日期?我使用MySQL DATETIME字段。
当我在我的PHP代码中向MySQL添加新记录时,我会用它来插入MySQL DATETIME。now()
我是否需要使用与存储 UTC 时间不同的内容?now()
MySQL: UTC_TIMESTAMP()
以“YYYY-MM-DD HH:MM:SS”或 YYYYMMDDHHMMSS.uuuuuu 格式的形式返回当前 UTC 日期和时间,具体取决于该函数是在字符串上下文中还是在数字上下文中使用
PHP: gmdate()
PHP 中还使用 PHP date_default_timezone_set()
来设置脚本的当前时区。您可以将其设置为客户端时区,以便所有格式设置函数都以本地时间返回时间。
事实上,虽然我很难让它工作,但总是偶然发现一些问题。例如。从MySQL返回的时间信息不会格式化为“UTC”,因此如果您不小心,strtotime会将其转换为本地时间。我很好奇是否有人有一个可靠的解决方案来解决这个问题,当日期遍历媒体边界(HTTP->PHP->MySQL和MySQL->PHP->HTTP)时不会中断,同时考虑XML和RSS / Atom。
我建议在UTC时区插入日期。这将为您节省许多麻烦,让您在未来遇到夏令时问题。
INSERT INTO abc_table (registrationtime) VALUES (UTC_TIMESTAMP())
当我查询我的数据时,我使用以下PHP脚本:
<?php
while($row = mysql_fetch_array($registration)) {
$dt_obj = new DateTime($row['message_sent_timestamp'] ." UTC");
$dt_obj->setTimezone(new DateTimeZone('Europe/Istanbul'));
echo $formatted_date_long=date_format($dt_obj, 'Y-m-d H:i:s');
}
?>
您可以将该值替换为一个可用的 PHP 时区。DateTimeZone