Javascript 两个不同格式的相同日期给出了不同的纪元时间

Javascript 两个不同格式的相同日期给出了不同的纪元时间,javascript,date,Javascript,Date,声明如下: (new Date("1993-09-01")).getTime() == (new Date(1993,9,1)).getTime() 节点、Firefox和Chromium的计算结果似乎都为false。为什么会发生这种情况?这是因为JavaScript日期对象中月份的索引从0开始(即一月是0,二月是1,以此类推) 对于右边的语句,如果我尝试console.log()它,新的日期(1993,9,1)将导致“Fri Oct 01 1993 00:00:00 GMT+0800(新

声明如下:

(new Date("1993-09-01")).getTime() == (new Date(1993,9,1)).getTime()  

节点、Firefox和Chromium的计算结果似乎都为false。为什么会发生这种情况?

这是因为JavaScript日期对象中月份的索引从0开始(即一月是0,二月是1,以此类推)

对于右边的语句,如果我尝试console.log()它,新的日期(1993,9,1)将导致“Fri Oct 01 1993 00:00:00 GMT+0800(新加坡标准时间)”

请尝试运行以下代码段:

const date1=新日期(1993,9,1);
const date2=新日期('1993-09-01');
console.log(date1);
控制台日志(日期2)两件事:

  • 对于,月份以0为基础。所以新的日期(1993年9月1日)不是9月而是1993年10月1日当地时间
  • 对于,当字符串以
    yyyy-mm-dd
    格式传递时,引擎可以假定时区为UTC或本地,具体取决于所遵循的规范()。因此
    新日期(“1993-09-01”)。getTime()==新日期(1993,8,1)
    如果发动机符合ES5规格,则仍可能返回false:
var d1=新日期(“1993-09-01”);
var d2=新日期(1993年8月1日);
console.log(d1.toISOString());

log(d2.toISOString())我以为Javascript会符合ISO 8601?这取决于如何实例化日期对象。请允许我进一步阐述我的答案,这取决于你所在的时区。在内部,时间以UTC时间工作。创建对象时没有一种直接指定时区的方法,但您可以处理输出以获得正确的输出。@EduardoGarcia!感谢分享,你可以找到更多关于日期类型的信息。两个“相同”的日期相隔一个月<代码>新日期(1993年9月1日)
是1993年10月1日。阅读