mysql - 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。
有什么想法或想法吗?
解决方案
我建议将所有日期/时间以一种通用格式存储在数据库中,UTC 将是最好的选择。
这样一来,无论他们的位置如何,您都可以轻松说出 1 分钟前...
如果您需要在前端显示完整的日期/时间,您需要将时间从 UTC 转换为该用户的位置,您可以通过 PHP 方便的 DateTime 函数来完成:
推荐阅读
- python - 判断二叉树是否平衡
- python - 如何从 metrics-server 获取 Pod CPU 和内存使用情况?
- django - Django 和登录“记住我”:如何查看其他代码的状态?
- java - 如何在 Java 中将 sun.nio.fs.ZipPath 转换为 sun.nio.fs.UnixPath?
- java - 在 Hibernate Search 运行时选择分析器
- winforms - 当我从列表视图中拖动项目时,如何在包含列表视图的表单中触发拖动或拖放事件?
- c++ - 在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上)
- terraform - 如何在 Terraform 中按名称应用我的资源之一?
- airflow - 如何管理气流 dags 之间的 python 包?
- python - 删除 try 和 except 块中的重复项