首页 > 解决方案 > MySQL 数据库中 DATE 和 TIME 向用户显示时间的最佳数据类型是什么?

问题描述

在此处输入图像描述

例如,我有一个用户可以发表评论的博客,我希望每个人都能看到评论是多久前发布的,例如:5 分钟前3 小时前

因此,如果伦敦的一个人发表评论,而印度的一​​个人访问该页面,他们都应该看到“ 1 分钟前”,悬停时应该看到相对于他们时区的时间。(伦敦晚上 10 点,印度早上 3.30)。

我目前考虑的解决方案是使用 varchar(25) 数据类型并将时间存储为 ISO-8601(例如 2019-12-12T21:46:42+00:00)

使用它我可以获得评论者的时区并将时间转换为当前用户的时区。它完美地工作。

但我想知道是否有更好/更优雅的方式来做到这一点?

到目前为止,我尝试使用 DATETIME 和 TIMESTAMP 数据类型,但它们在这种情况下似乎没有用。我在网上读到 TIMESTAMP 应该将时间存储在 UTC 时区并将其发送回用户的时区,但这对我来说并没有发生,而是保存在我的本地时间。是的,我在保存数据时没有指定任何时间,MySQL 使用了 CURRENT_TIMESTAMP。

在此处输入图像描述

有什么想法或想法吗?

标签: mysqldatedatetimetimedatetime-format

解决方案


我建议将所有日期/时间以一种通用格式存储在数据库中,UTC 将是最好的选择。

这样一来,无论他们的位置如何,您都可以轻松说出 1 分钟前...

如果您需要在前端显示完整的日期/时间,您需要将时间从 UTC 转换为该用户的位置,您可以通过 PHP 方便的 DateTime 函数来完成:

https://www.php.net/manual/en/datetime.settimezone.php


推荐阅读