JavaScript 是一种包含许多愚蠢事物的语言,其中之一是:
> 新日期() 2022 年 8 月 24 日星期三 ... > 新日期().getFullYear() 2022 > 新日期().getMonth() 7 > 新日期().getDate() 24
它将 2022-08-24 表示为 (2022, 7, 24)。年和日的索引从一开始,月的索引从零开始。
但是,在这种情况下,问题是从 Java复制而来的:
getMonth :返回的值介于 0 和 11 之间,值 0 表示一月。
getDate :返回的值介于 1 到 31 之间,表示月份中的某天。
我很想责怪Java,但他们似乎从C复制了这个问题:
当地时间(3) :
tm_mday:月份中的第几天,范围为 1 到 31。 tm_mon:自一月以来的月份数,范围为 0 到 11。
查看Unix History repo ,第一次提到“月(0-11)”是在 1973 年的Research Unix V4中:
该值是一个指针 到一个数组,其组件是 .s3 .lp +5 5 0 秒 .lp +5 5 1 分钟 .lp +5 5 2小时 .lp +5 5 每月 3 天 (1-31) .lp +5 5 4 个月 (0-11) .lp +5 5 5 年 \*- 1900 .lp +5 5 一周中的第 6 天(星期日 = 0) .lp +5 5
虽然这可能是Dennis Ritchie的原始决定,但也有可能是从更早的系统复制而来的。有人知道吗?
评论来自: 脸书