为什么这个日期转换需要在月份上加1?

use*_*486 2 javascript datetime date date-formatting

我在 javascript 中有这个日期变量$scope.dt,内容是Tue Jul 08 2014 00:00:00 GMT+0800 (Malay Peninsula Standard Time). 我想将其转换为返回一个字符串2014-7-8(YYYY-MM-DD)。

下面是我写的函数;

function convertDate_YYYYMMDD(d)
{
    var curr_date = d.getDate();
    var curr_month = d.getMonth()+1; //why need to add one?
    var curr_year = d.getFullYear();
    return (curr_year + "-" + curr_month + "-" + curr_date );
}
Run Code Online (Sandbox Code Playgroud)

效果很好。我不明白的是为什么我需要加1才能得到正确的结果curr_month?如果我不这样做,这个月总是会少一月。该代码有效,但我不知道为什么它有效。

有人可以建议吗?

kay*_*kay 5

这是 C 的遗产。时间戳中的月份是从零开始的。

比较Date.getMonth()

getMonth 返回的值是 0 到 11 之间的整数。0 对应一月,1 对应二月,依此类推。

struct tm:

int tm_mon month of year [0,11]

为什么在许多编程语言中月份都从零开始,请参见此处:基于零的月份编号。释义:使用一月== 0在古代很有用,但现在我们仍然坚持使用它。