当使用下面的调用在JavaScript中初始化一个新的Date对象时,我发现month参数从0开始计数。
new Date(2010, 3, 1); // that's the 1st April 2010!
为什么month参数从0开始?另一方面,月份的日期参数(最后一个)是1到31之间的数字。有什么好的理由吗?
当使用下面的调用在JavaScript中初始化一个新的Date对象时,我发现month参数从0开始计数。
new Date(2010, 3, 1); // that's the 1st April 2010!
为什么month参数从0开始?另一方面,月份的日期参数(最后一个)是1到31之间的数字。有什么好的理由吗?
当前回答
2023年真正的问题是:
如果Date从JS的第一天就被打破了,为什么28年后(如果你从零开始算的话是27年)它还在这里?
JS有很多不好的部分/怪癖,最糟糕的是其中一些在几十年里都没有被修复(有趣的事实:我们谈论的是Date日期)。
但我们很幸运,看来《约会》即将结束。
扰流板
new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
时间(建议)
提案介绍如下:
日期一直是ECMAScript中一个长期存在的痛点。这是一个针对Temporal的建议,这是一个充当顶级名称空间的全局对象(如Math),它为ECMAScript语言带来了一个现代的日期/时间API。
正如文档中报告的那样,它基于“我们检查过的常见用例”,并为不同类型的数据提供了多种类型:
普通类型没有时区 zoneeddatetime类型有一个时区 大多数类型都有日历 许多有用的类型:Absolute, DateTime, Date, Time, TimeZone,…
这是一个概述各种时态类型及其关系的模式
您可以在可用的文档和漂亮的烹饪书中阅读更多关于它们的信息。或者探索当前的问题。
颞叶何时可用
自21年3月以来,它处于第三阶段/草案(参见TC39阶段参考资料)。请看TC39 21年3月的幻灯片。
现在它很快就可以被包含在TypeScript中了,因为他们的策略是:
当新特性达到阶段3时,它们就可以被包含到TypeScript中了。
对于Node和主流浏览器,我们可能需要等待更长的时间。
从今天开始尝试
与此同时,您可以使用Temporal polyfill进行实验。
npm install --save proposal-temporal
// temporal-test.js
const { Temporal } = require('proposal-temporal');
// or as an ES module
// import { Temporal } from 'proposal-temporal/lib/index.mjs';
// 11 means November now!
const date = new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
const sameDate = Temporal.PlainDate.from(
{year: 2020, month: 11, day: 26}); // => 2020-11-26
其他回答
这是编程世界中一个古老的(可能是不幸的,可能会消亡的)传统,请参阅旧标准(POSIX) localtime C函数http://linux.die.net/man/3/localtime
除了月份的第一天之外,其他都是以0为基础的,请参阅这里的完整列表,包括范围:)
实际上,这里以1为基础的天数才是奇怪的……奇怪的是。为什么要这么做?我不知道……但可能发生在同一次会议上,他们喝得烂醉,决定分号是可选的。
2023年真正的问题是:
如果Date从JS的第一天就被打破了,为什么28年后(如果你从零开始算的话是27年)它还在这里?
JS有很多不好的部分/怪癖,最糟糕的是其中一些在几十年里都没有被修复(有趣的事实:我们谈论的是Date日期)。
但我们很幸运,看来《约会》即将结束。
扰流板
new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
时间(建议)
提案介绍如下:
日期一直是ECMAScript中一个长期存在的痛点。这是一个针对Temporal的建议,这是一个充当顶级名称空间的全局对象(如Math),它为ECMAScript语言带来了一个现代的日期/时间API。
正如文档中报告的那样,它基于“我们检查过的常见用例”,并为不同类型的数据提供了多种类型:
普通类型没有时区 zoneeddatetime类型有一个时区 大多数类型都有日历 许多有用的类型:Absolute, DateTime, Date, Time, TimeZone,…
这是一个概述各种时态类型及其关系的模式
您可以在可用的文档和漂亮的烹饪书中阅读更多关于它们的信息。或者探索当前的问题。
颞叶何时可用
自21年3月以来,它处于第三阶段/草案(参见TC39阶段参考资料)。请看TC39 21年3月的幻灯片。
现在它很快就可以被包含在TypeScript中了,因为他们的策略是:
当新特性达到阶段3时,它们就可以被包含到TypeScript中了。
对于Node和主流浏览器,我们可能需要等待更长的时间。
从今天开始尝试
与此同时,您可以使用Temporal polyfill进行实验。
npm install --save proposal-temporal
// temporal-test.js
const { Temporal } = require('proposal-temporal');
// or as an ES module
// import { Temporal } from 'proposal-temporal/lib/index.mjs';
// 11 means November now!
const date = new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
const sameDate = Temporal.PlainDate.from(
{year: 2020, month: 11, day: 26}); // => 2020-11-26
简单解new日期(年、月、日):-
let year = 2022
let month = 4
let day = 25
//use
new Date(year,month-1,day)
他们可能认为月份是一个枚举(第一个索引为0),而日期不是,因为它们没有关联的名称。
或者更确切地说,他们认为这一天的数字就是这一天的实际表示形式(就像在12/31这样的日期中用数字表示月份一样),就好像你可以用数字作为变量进行枚举,但实际上是以0为基础的。
所以实际上,对于月份,也许他们认为正确的枚举表示应该是使用月份的名称,而不是数字,如果日期有名称表示,他们也会这样做。想象一下,如果我们说1月5日、1月6日,而不是1月5日、1月6日等等,那么他们可能也会做一个以0为基础的天数枚举……
也许在潜意识里,他们想到了月份的枚举{一月,二月,……}和天数为{1,2,3,…},除非你以数字而不是名称的形式访问日期,比如1代表1,等等,所以不可能从0开始…