在Node.js中,为何new Date构造器生成的日期默认时间为早上7点?
该问题由JavaScript的时区解析规则导致
- 你传入
Date构造器的年、月、日参数,默认按照运行环境的本地时区解析为对应时间,而console.log输出的带Z后缀的结果是UTC标准时间,两者存在时差。 - JS的月份参数为0索引,你传入的
09对应10月,和输出的月份一致,这部分不存在异常。
具体现象解释
运行
const date = new Date(2020, 09, 11)时:
构造器将参数解析为本地时区的2020年10月11日0点0分0秒,如果你的运行环境时区为UTC-7(如北美山地夏令时区域),换算成UTC时间需要加7小时,最终得到的UTC时间就是2020-10-11T07:00:00.000Z,和你看到的输出完全吻合。运行
const date2 = new Date(2020, 09, 11, -7)时:
第四个参数是小时位,JS支持传入负数做时间偏移,相当于给本地时区的10月11日0点再减7小时,得到本地时区的10月10日17点,换算成UTC时间再加7小时,刚好得到UTC时间的10月11日0点,也就是你看到的2020-10-11T00:00:00.000Z结果。
常见使用方案
如果需要直接创建UTC时间的指定日期,使用Date.UTC方法封装参数即可:
// 直接生成UTC时间2020年10月11日0点的Date对象 const utcDate = new Date(Date.UTC(2020, 09, 11)); console.log(utcDate); // 输出 2020-10-11T00:00:00.000Z
如果需要查看对应本地时区的时间文本,调用toLocaleString方法即可:
const localDate = new Date(2020, 09, 11); // 输出你本地时区的时间字符串,格式为 2020/10/11 00:00:00 console.log(localDate.toLocaleString());
内容的提问来源于stack exchange,提问作者BJ Rutledge
相关产品推荐
相关产品推荐

