npm包Moments的作者指出,Moments已弃用,并且仅处于强制模式。
作者建议我们远离Moments;虽然它确实推荐了一些其他的库,但如果可能的话,我更喜欢将数据保存为普通的JavaScript对象,就像new Date()
返回的对象一样。
是否有推荐的保存数据的方法?
正如我提到的,我希望尽可能地将数据保存为普通的new Date();
。
但我很高兴保存任何其他数据是必要的,以保持跟踪数据,使其未来的证明,并(合理地说)不需要使用额外的库在未来。
是否有一个好的规则来确定要保存的格式?
1条答案
按热度按时间chhqkbe11#
TDLR;最好以这些普遍接受的技术格式保存时间戳,然后在客户端处理可读性(读取:将UTC或ISO格式存储到DB,然后手动或使用moments或luxon(moments的“后继者”)等库在本地处理可读性)
此外,TLDR;你在数据库中保存的东西,一旦你把它拉到客户端,你可以像这样重新制作成一个JavaScript Date对象:
new Date(downloadDateTime)
,这样你就可以像使用标准的const date = new Date();
一样使用date对象了。以下是您可能会考虑保存到DB中的两种主要格式(分别为UTC和ISO)以及如何使用普通JavaScript创建它们。
字符串
UTC基本上是协调世界时和0度经度(本初子午线)的时间;它不受夏令时的影响。
消歧义:它有时也被称为格林威治子午线时间(GMT);格林威治是英国的一个城市(约8英里以东的伦敦),本初子午线历史上贯穿,所以有时你看到它是作为格林尼治标准时间。这将是0度经度是由委员会在1884年投票决定的。(也就是说,这是一个投票后的公约。)此外,在飞机和船舶导航它通常被称为祖鲁时间(祖鲁这是Z的无线电语音字母表)。
这是一个2023-11- 07 T21:01:44.000Z中的时间戳的例子。(现在你知道为什么在它的末尾有一个Z了。)
ISO 8601格式是全球公认的,该格式类似于UTC格式,除了它还包括时区信息。
(* 全球公认 *)你为什么告诉我这个?因为跨时区格式化时间戳数据在不同的地方可能会有点麻烦;例如,他们可能会在时间之前保存AM/PM等,所以ISO格式只是让它干净。你使用这种格式保存数据在db中,然后你可以在本地转换它以显示你想要的方式。
以下是ISO时间戳的几个示例,请注意,与UTC时间的时间偏移有Z或+/-。“2023-11- 07 T21:01:44.000 Z”(UTC时间),“2023-11- 07 T21:01:44.000-05:00”(东部标准时间)或“2023-11- 07 T21:01:44.000+02:00”(中欧时间)。
了解更多here on ISO时间戳。
并阅读this question以获得更多关于时区,标准时间与夏令时等的细微差别的信息。
如果你要记录时间戳,一般来说保存你的时间戳为UTC
new Date()
是相当安全的。在你的数据库中,在Supplement中,你会希望以timestampz
保存它。此外,对于UTC时间,像moment,moment-timezones和luxon(moments的“后继者”)这样的库可以在大多数情况下处理该数据并根据你的需要进行解析。(可选)但是,如果您是完美主义者,并且还不完全了解要保存的数据的所有要求,则还可以保存以下内容:
注意下面列表的格式是描述,JavaScript函数,和数据类型在PostgreSQL/Supplement中。
new Date()
timestampz
(new Date()).toISOString()
timestampz
Intl.DateTimeFormat().resolvedOptions().timeZone;
text
int2