JavaScript 目前没有内置的标准对象来表示没有时间的日期。当你使用这个Date
对象时,不管它的名字,你应该把它看作是一个“日期和时间”对象,更接近于其他语言所称DateTime
的 . 总是有一个隐含的时间组件,即使您不提供。
对象的构造Date
函数有几种不同的形式,这些形式因您传入的参数而异。如果您传递一个字符串,它将尝试解析该字符串。但是,效果可能会因该字符串包含的内容而异,并且可能因实现而异。
例如:
// This will be parsed as UTC at midnight (but doesn't work in IE8)
new Date("2013-05-31")
// This will be parsed as local time in Chrome, and cause "Invalid Date" in IE
new Date("2013-05-31 00:00:00")
// This will be parsed as local time at midnight, and usually works in all browsers, but is not standardized.
new Date("2013/05/31")
最后一个可能是可以接受的,但对我来说仍然很可疑。大多数人不使用这种格式,他们更有可能输入 mm/dd/yyyy 或 dd/mm/yyyy,这可能会导致歧义,具体取决于您输入的文化和日期。
您最好将数字参数传递给Date
构造函数:
new Date(2013, 4, 31)
请注意,执行此操作时,月份运行 0-11 而不是 1-12。因为我通过了 a 4
,所以这代表五月。这是一个常见的错误来源,因此请仔细观察。
我还应该提到,如果您使用Moment.js 之类的库,您可以消除所有浏览器变体并支持您想要的任何格式。例如:
// This will be parsed as local time
moment('2013-05-31','YYYY-MM-DD')
// This will be parsed as UTC
moment.utc('2013-05-31','YYYY-MM-DD')
还有许多其他好的日期/时间库。如果您需要支持较旧的浏览器,那么 Moment 是一个不错的选择。但是,如果您主要支持现代浏览器,请尝试使用 Luxon或date- fns 。