在不考虑时区的情况下在MongoDB中存储日期的最佳方法是什么?
我尝试用一个例子来解释这个问题:
Giuseppe在意大利创建了一个在日期"December 15, 2014"
中调用,当系统存储这个日期时,在MongoDB中会存储"2014-12-14T23:00:00.000Z"
。
英国的 John 阅读了发票,并将"December 14, 2014"
视为发票日期。
显然,这些信息是错误的,因为Jhon也应该看到"December 15, 2014"
作为发票日期,我该如何解决这个问题?
不应将整个日期放在Date
对象中。 尽管名称如此,但Date
表示日期和时间。 如果您正在使用的值表示整个日期,而不是该日期的特定时间,则应以另一种格式存储该值。
选项包括:
YYYY-MM-DD
或YYYYMMDD
格式的字符串- 自某个参考点以来整天的整数。
这意味着"你做错了"。长期以来,良好的数据库实践是以UTC或祖鲁时间格式存储日期。所以你应该做的(至少在JavaScript符号中)是这样的:
var myDate = new Date ("2014-12-15");
您应该考虑到您输入的日期字符串已经从本地时间转换为 UTC 时间,或者只是馈送您的对象,因为这是驱动程序将要做的。
JavaScript 有有趣的方法来解释提供的日期"字符串"。所以例如:
var myDate = new Date ("2014/12/15");
实际上为您的应用程序提供"本地"时区的日期对象。在大多数情况下,可能不是您真正想要的。
最佳实践。这一点怎么强调都不为过。"通用时间常数"是存储日期数据的唯一方法。否则你就做错了。