对不起,如果这是一个非常基本的问题,但我不明白以下:
当我格式化Date对象时(无论我使用什么库),我得到一个字符串。
from this: 2022-11-28T16:55:44.000Z (new Date object)
I get this: 2022-11-28 16:55:44 (or other formats obviously depending how I format it)
即使我把它变回一个对象it,T和000Z也不会再存在了。我是忽略它(看起来像是任何库或日期方法在格式化时都忽略了T和字符串结尾)还是把它'back'添加进去如果我的数据库中存储的日期不同(用于以后的查询等),这不是一个问题吗?
2条答案
按热度按时间ccrfmcuu1#
Z
表示UTC(协调世界时,也称为格林威治子午线时间),删除它会改变含义-除非您的浏览器或服务器位于格林威治时区,而且现在是冬天(没有夏令时)。您可以在
Date
对象和UTC字符串之间来回转换,如下所示(我的浏览器使用中欧时区):或者,您也可以在
Date
对象和浏览器或服务器时区的格式化字串之间来回转换(最后一行显示我的浏览器格式与您的不同):但是您不应该在数据库中以这种格式存储
Date
对象,除非您可以保证它们总是在同一时区中读取和写入。(在CET中)并存储它,那么在新西兰时区使用浏览器读取它并将其转换回Date
对象的其他人将看到错误的值。如果格式规则不明确(9月11日还是11月9日?),则类似9/11/2022
的日期将不明确。这就是为什么我在存储
Date
对象时更喜欢使用UTC字符串,并且只在将它们输出给用户和解析用户输入时才使用格式化字符串。7y4bm7vi2#
我看到它甚至更强:你应该永远将日期存储为字符串,这是一个设计缺陷。总是存储正确的
Date
对象。在SO上你可以找到数百个问题,人们在这些问题上有问题,因为他们将日期值存储为(本地化的)字符串。这不仅限于MongoDB,它适用于任何数据库。MongoDB中的
Date
对象是UTC时间-总是且仅!通常客户端应用程序负责以本地时区和本地格式显示日期/时间。你说的“把它转回来”是什么意思,你是怎么做的?
不应依赖没有时区
new Date(<string>)
某些浏览器/环境可能应用UTC时间,其他浏览器/环境可能使用当前本地时区,请参阅假定时区差异看看第三方日期库,例如moment.js、Luxon或Day.js。通常它们提供更多的控制如何解析字符串和时区。