You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js中,为何new Date构造器生成的日期默认时间为早上7点?

该问题由JavaScript的时区解析规则导致
  • 你传入Date构造器的年、月、日参数,默认按照运行环境的本地时区解析为对应时间,而console.log输出的带Z后缀的结果是UTC标准时间,两者存在时差。
  • JS的月份参数为0索引,你传入的09对应10月,和输出的月份一致,这部分不存在异常。

具体现象解释

  1. 运行const date = new Date(2020, 09, 11)时:
    构造器将参数解析为本地时区的2020年10月11日0点0分0秒,如果你的运行环境时区为UTC-7(如北美山地夏令时区域),换算成UTC时间需要加7小时,最终得到的UTC时间就是2020-10-11T07:00:00.000Z,和你看到的输出完全吻合。

  2. 运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:30:03