问题描述
我在 nodejs repl 下执行下面的语句,我在同一日期得到两个不同的结果
I was executing below statement under nodejs repl and i was getting two different result for same date
var dateStr1 = "2015/03/31";
var dateStr2 = "2015-03-31";
var date1 = new Date(dateStr1);//gives Tue Mar 31 2015 00:00:00 GMT+0530 (IST)
var date2 = new Date(dateStr2);//gives Tue Mar 31 2015 05:30:00 GMT+0530 (IST)
在第一个小时,分钟,秒都为零,而在第二个默认小时,分钟被设置为时区小时,分钟,即 5:30
In the 1st one hour,min,seconds are all zeros while in the 2nd one by default hour,min is getting set to as a timezone hour,min which is 5:30
推荐答案
归结为 Date.parse()
如何处理 ISO-8601 日期格式.
It boils down to how Date.parse()
handles the ISO-8601 date format.
日期时间字符串可能采用 ISO 8601 格式.例如,可以传递和解析2011-10-10"(只是日期)或2011-10-10T14:48:00"(日期和时间).UTC 时区用于解释不包含时区信息的 ISO 8601 格式的参数(注意 ECMAScript ed 6 草案指定没有时区的日期时间字符串将被视为本地,而不是 UTC)
您的第一个日期格式 2015/03/31
是 假设是 2015 年 3 月 31 日上午 12 点在您当前的时区.
您的第二个日期格式 2015-03-31
被视为 ISO-8601,假定为 2015 年 3 月 31 日上午 12 点 UTC 时区.
Your first date format 2015/03/31
is assumed to be March 31st, 2015 at 12am in your current time zone.
Your second date format 2015-03-31
is seen as ISO-8601 and is assumed to be March 31st, 2015 at 12am UTC time zone.
来自链接文档的假定时区的差异"标题更详细:
The "Differences in assumed time zone" heading from the linked documentation goes into a bit more detail:
给定日期字符串2014 年 3 月 7 日",parse() 假定本地时区,但给定 ISO 格式,例如2014-03-07",它将假定时区为 UTC.因此,使用这些字符串生成的 Date 对象将代表不同的时刻,除非系统设置为 UTC 的本地时区.这意味着两个看起来相同的日期字符串可能会导致两个不同的值,具体取决于正在转换的字符串的格式(此行为在 ECMAScript ed 6 中有所更改,因此两者都将被视为本地).
这篇关于当传递给“新日期"时,javascript 中 yyyy-mm-dd 和 yyyy/mm/dd 的不同结果;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!