为何JavaScript中new Date().toISOString()对同一日期输出不同结果?
为什么JavaScript中同一日期调用toISOString()会得到不同输出?
问题里的两种Date创建方式,本质是采用了不同的时区基准,导致最终转成UTC格式的toISOString()输出不一样:
字符串参数构造
new Date("2023-11-26")
当传入YYYY-MM-DD格式的字符串时,JavaScript会默认把这个日期解析为UTC时区的00:00:00。这个Date实例本身就对应UTC时间的2023年11月26日零点,调用toISOString()自然输出"2023-11-26T00:00:00.000Z"(Z代表UTC时区)。数字参数构造
new Date(2023, 11-1, 26)
这种传入年、月、日的方式,JavaScript会基于当前运行环境的本地时区来创建日期。比如你的本地时区是UTC-3,本地时间2023年11月26日00:00对应的UTC时间就是2023年11月25日21:00。而toISOString()的作用就是把Date实例转成UTC时区的ISO格式字符串,所以最终输出就是"2023-11-25T21:00:00.000Z"。
另外注意:JavaScript的月份参数是0-based(从0开始计数),所以11-1对应的是11月,这点是正确的,不影响日期的本地时区解析。
示例代码验证:
console.log(new Date("2023-11-26").toISOString()) // "2023-11-26T00:00:00.000Z" console.log(new Date(2023, 11-1, 26).toISOString()) // "2023-11-25T21:00:00.000Z"
内容的提问来源于stack exchange,提问作者Blogger Klik
相关产品推荐
相关产品推荐

