new Date(0, 0, 0) 使用的是 年月日构造函数,而不是时间戳构造函数。

当你传入多个参数时,Date 构造函数的参数顺序是:

  • new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)

所以 new Date(0, 0, 0) 实际上是:

  • 年份: 0 → 被解释为 1900 年(0-99 会被加上 1900)
  • 月份: 0 → 1月(月份从 0 开始,0=1月)
  • 日期: 0 → 上个月的最后一天(0 表示前一个月的最后一天)

结果是:1899年12月31日

new Date(0, 0, 0)
// Sun Dec 31 1899 00:00:00 GMT+...
 
// 如果想要 1970 年 1 月 1 日,应该用:
new Date(0)  // 时间戳 0 毫秒
// Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
 
// 或者明确指定:
new Date(1970, 0, 1)
// Thu Jan 01 1970 00:00:00 GMT+0800

关键区别

  • new Date(0) → 单个参数作为时间戳(自 1970-01-01 00:00:00 UTC 的毫秒数)
  • new Date(0, 0, 0) → 多个参数作为年月日(1900年 + 1月 + 前月最后一天)