database - 使用 JS 保存和处理日期的正确结构是什么?
问题描述
如果我打印new Date()
,我将收到基于特定时区的日期和小时。
而且时区不一样:)
这意味着不同地方的输出会有所不同。
我想到了在数据库中保存日期的这种结构:
{
date: {
text: "08-10-2018",
timestamp: THE_TIME_STAMP
}
}
然后将时间戳转换为日期和时间。
我不希望每个用户都会看到创建者时区的创建日期 - 我希望每个用户都看到基于他自己的时区的创建日期。
我的问题是我应该在数据库中保存什么?我应该改用时间戳吗?时间戳会与用户的时区匹配吗?这里的最佳做法是什么?
解决方案
不要将日期/时间存储在字符串中。这总是一个坏主意。
MongoDB 有一个内置的 Date 类型,它的驱动程序支持。它将以ISODate
格式存储日期。如果你有一个 nodejs 后端,你只需要提供 JS 日期对象,驱动程序就会处理所有事情。
您可以查询数据的日期范围,如果将其存储为字符串,则无法正确执行。
您可以在前端将 UTC ISODate 转换为查看者的时区。
如果你有一个基于 js 的前端,你可以使用luxon或 moment.js 来转换到不同的时区。
推荐阅读
- postgresql - Postgres LIKE 查询触发全表扫描
- typescript - typescript 通用约束 keyof T 和字符串:ts2322
- php - Stripe:无法更改经过身份验证的 3DS 卡的计划?
- python - keras 预处理的问题
- python - 在 python 中为树莓派记录传感器数据、计算变化率和数据分析支持
- php - 强制在 iPhone 上打开后置摄像头
- php - preg_match_all 不忽略模式后的字符
- python - 在列表理解中使用元组解包创建对象
- python - 从文本文件中读取的字符串与 Python 中变量中的字符串之间的区别
- javascript - 如何从 Javascript 获取访问 XML 文件(两种方式和每件事的错误)