【问题标题】:javascript is creating date wrong monthjavascript 创建日期错误的月份
【发布时间】:2012-08-28 13:45:06
【问题描述】:

使用 Mozilla Firefox Firebug:

var myDate = new Date(2012, 9, 23, 0,0,0,0);
myDate;

日期 {2012 年 10 月 23 日星期二 00:00:00 GMT-0400(东部夏令时间)}

为什么 javascript 会创建错误月份的日期?

【问题讨论】:

  • JavaScript 月份索引为零...找到欺骗链接
  • @Matt:给我几分钟时间来收集一些代表点 ;-)
  • 哎呀,我不敢相信我找不到。 Google 让我失望了。
  • @Matt: "site:stackoverflow.com date javascript month zero indexed" ? stackoverflow.com/questions/7834266/…

标签: javascript


【解决方案1】:

不,javascript 的 Date 月份以 0 开头,所以 9 是第 10 个月,现在是 10 月

Reference:

new Date(year, month [, day, hour, minute, second, millisecond]);

[...]

表示月份的整数值,从 0 开始表示 1 月到 11 表示 12 月。

【讨论】:

  • 今天也是这样吗?我创建了一个 Date(1982, 10, 14)... 有时它给我 13 Oct 1982 23:00 有时它给我 14 Oct 1982 00:00
  • 我认为值得一提的是,月份是从零开始的,不仅在 JavaScript 中,而且几乎在所有地方。这遵循了 C 中 <time.h> 的传统。C 中用于索引数组的所有字段都是从零开始的,即使人类可读的形式是从一开始的。每当在其他地方创建类似的 API 时,它们中的大多数都遵循该约定,例如 Java 或 JavaScript。
  • 只有真正的知识分子才能理解。显然我不是一个,因为我被这件事轻微地触发了
  • @DiegoT.Yamaguchi 发生在每个人身上,所以请放松 ;-)
【解决方案2】:

在 javascript 世界中,月份从零开始! 对我来说有点奇怪。 无论如何,9 不是 9 月,而是 9 是 10 月。

【讨论】:

  • 这并不奇怪。在编程世界中,大多数语言以基于 0 的整数提供月份。
  • 你知道我会回答“但是日子和年份呢?为什么它们不是从零开始的?”但后来我意识到;实际上,它们是两种完全不同的数据类型,月份是专有名称,字符串,月份中的日期以及年份只是数字,整数。所以这并不是很奇怪,当你想到它时它实际上有点道理。
  • @MarkCarpenterJr 不,我认为从零开始的月份是一个虐待狂的决定。每个理智的人都认为 9-11 是 9 月 11 日,除了决定在代码中任意将其设为 8-11 的 jagoff。年已经从零开始,但天不是,所以同样的决定应该适用于天。
【解决方案3】:

使用字符串作为参数来避免 Date 构造函数的怪异行为。

例子:

const myDate = new Date('2021-08-13'); // Result: Fri Aug 13 2021 02:00:00 GMT+0200...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多