PHP + MySQL 构建与服务器时区无关的脚本?

标签 php mysql

在构建 PHP 应用程序时,我总是无法尝试让所有内容都与服务器时间和时区正确配合。

我的大部分记录上通常都有一个类似时间戳的简单字段,该字段未更新 - 仅供引用。我用它来跟踪事件发生的时间、用户注册的时间、创建评论的时间等。

我一直在尝试遵循使用日期时间字段存储此值的最佳做法。问题是,当使用不同的服务器时,它们通常具有不同的时区,因此日期时间不匹配甚至接近,除非我添加更多代码来抵消差异。这在使用 MySQL 复制和 NOW() 查询时也可能是一个问题,因为它们通常是滞后的。

我想知道我是否应该重新使用整数,因为它们似乎不关心时区,只需要设置服务器时钟。缺点是所有那些 MySQL 日期/时间函数(我从不使用)都无法使用,这在将来可能会成为问题。好处是我可以通过返回到 4 字节整数而不是日期时间来将存储空间减少一半。

人们还提到整数只能工作到 2037 年 - 为什么这是个问题?谁期望在 2037 年使用 PHP + MySQL?

有什么我遗漏的吗?像 Unix 时间戳一样以不可知的方式存储引用时间是否更好?

最佳答案

我在所有数据库工作中都使用日期/时间字段,但所有内容都以 GMT 格式存储。几乎是我的代码获得的第一个机会,它将某些东西转换为 GMT,并在 gmt 等中进行所有内部数学运算。我唯一一次将它从 GMT 转换回本地时间是在向用户显示时。 PHP 具有 unixtime()(格林威治标准时间)、gmstrftime 和 gmdate,几乎所有您需要的东西。

关于PHP + MySQL 构建与服务器时区无关的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910451/

相关文章:

mysql - 获取表1中的记录,与表2中的多条记录进行比较

php - SELECT 查询,一列 LIMIT 1,但不是其余的

php - 带有 Apache 和 MySQL mysqli_connect 的 Docker PHP 5.6.23 不是添加了扩展的函数

mysql - 我可以使用 JOIN 而不是子查询来获取 MySQL 中各个表的 COUNT() 吗?

PHP - memory_get_usage() 的奇怪行为

php - 使用 bootstrap 3 在自定义主题中注册和使用菜单

php - 按下按钮时尝试发送主键值以编辑数据

php - 如何在 array_map() 中为我的回调函数使用参数/自变量?

php - PHP中的提醒系统

java - 如何在hql中对两个具有相同关键字的字段进行搜索操作?