MySQL 数据库中 DATE 和 TIME 显示用户相对时间的最佳数据类型是什么?
What's the best data type for DATE and TIME in MySQL database to display time RELATIVE to the user?
例如,我有一个博客,用户可以在其中发表评论,我希望每个人都可以看到很久以前评论是如何发布的,例如:5 分钟前 或 3 小时前.
因此,如果一个伦敦人发表评论,而一个印度人访问该页面,他们都应该看到“1 分钟前”和 悬停 应该看到相对于他们时区的时间。 (伦敦晚上 10 点,印度凌晨 3.30)。
我目前想到的解决方案是使用 varchar(25) 数据类型并将时间存储为 ISO-8601(例如 2019-12-12T21:46:42+00:00)
使用它我可以获得评论者的时区并将时间转换为当前用户的时区。它完美运行。
但我想知道是否有更好/更优雅的方法?
到目前为止,我尝试使用 DATETIME 和 TIMESTAMP 数据类型,但它们在这种情况下似乎没有用。我在网上读到 TIMESTAMP 应该以 UTC 时区存储时间并将其发送回用户的时区,但这对我来说并没有发生,而是以我的当地时间保存。是的,我在保存数据时没有指定任何时间,MySQL 使用了 CURRENT_TIMESTAMP.
有什么想法或想法吗?
我建议您将所有 dates/times 以一种通用格式存储在您的数据库中,而 UTC 将是最佳选择。
这样一来,不管他们在什么地方,你1分钟前说的都很容易...
如果您需要在前端显示完整的 date/time,您需要将时间从 UTC 转换为该用户的位置,您可以通过 PHP's方便的 DateTime 函数:
例如,我有一个博客,用户可以在其中发表评论,我希望每个人都可以看到很久以前评论是如何发布的,例如:5 分钟前 或 3 小时前.
因此,如果一个伦敦人发表评论,而一个印度人访问该页面,他们都应该看到“1 分钟前”和 悬停 应该看到相对于他们时区的时间。 (伦敦晚上 10 点,印度凌晨 3.30)。
我目前想到的解决方案是使用 varchar(25) 数据类型并将时间存储为 ISO-8601(例如 2019-12-12T21:46:42+00:00)
使用它我可以获得评论者的时区并将时间转换为当前用户的时区。它完美运行。
但我想知道是否有更好/更优雅的方法?
到目前为止,我尝试使用 DATETIME 和 TIMESTAMP 数据类型,但它们在这种情况下似乎没有用。我在网上读到 TIMESTAMP 应该以 UTC 时区存储时间并将其发送回用户的时区,但这对我来说并没有发生,而是以我的当地时间保存。是的,我在保存数据时没有指定任何时间,MySQL 使用了 CURRENT_TIMESTAMP.
有什么想法或想法吗?
我建议您将所有 dates/times 以一种通用格式存储在您的数据库中,而 UTC 将是最佳选择。
这样一来,不管他们在什么地方,你1分钟前说的都很容易...
如果您需要在前端显示完整的 date/time,您需要将时间从 UTC 转换为该用户的位置,您可以通过 PHP's方便的 DateTime 函数: