当使用下面的调用在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之间的数字。有什么好的理由吗?
当前回答
这可能是一个缺陷,但当你想将月份或星期表示为字符串时,它也非常方便,你可以创建一个像['jan,'feb'…等][新日期().getMonth()]的[2月”、“简”……[new Date().getMonth()]或['jan','feb'…]等][新日期().getMonth () (1)
月份中的天数通常没有命名,因此您不会为这些日期创建具有名称的数组。在这种情况下,1-31更容易处理,所以你需要每次都减去1…
其他回答
这是编程世界中一个古老的(可能是不幸的,可能会消亡的)传统,请参阅旧标准(POSIX) localtime C函数http://linux.die.net/man/3/localtime
除了月份的第一天之外,其他都是以0为基础的,请参阅这里的完整列表,包括范围:)
实际上,这里以1为基础的天数才是奇怪的……奇怪的是。为什么要这么做?我不知道……但可能发生在同一次会议上,他们喝得烂醉,决定分号是可选的。
一年总是有12个月,所以早期的C实现可能使用一个静态的固定宽度数组,索引为0..11。
简单解new日期(年、月、日):-
let year = 2022
let month = 4
let day = 25
//use
new Date(year,month-1,day)
我知道这不是最初问题的答案,但我只是想向你们展示我对这个问题的首选解决方案,我似乎从来没有记住过,因为它不时地出现。
小函数zerofill可以在需要的地方填充零,月份只是加了+1:
function zerofill(i) {
return (i < 10 ? '0' : '') + i;
}
function getDateString() {
const date = new Date();
const year = date.getFullYear();
const month = zerofill(date.getMonth()+1);
const day = zerofill(date.getDate());
return year + '-' + month + '-' + day;
}
但是,是的,Date有一个相当不直观的API,当我读Brendan Eich的Twitter时,我笑了。