为什么需要在月份中添加1来进行此日期转换?

时间:2014-07-08 10:52:29

标签: javascript date datetime 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 );
}

工作正常。我不明白为什么我需要添加1来获得正确的curr_month?如果我不这样做,那么这个月总会被一个人拒之门外。代码有效,但我不知道它为什么会起作用。

有人可以提供建议吗?

3 个答案:

答案 0 :(得分:4)

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

比较Date.getMonth()

  

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

struct tm

  

int tm_mon month of year [0,11]

为什么在许多编程语言中从零开始的月份在这里解释:Zero-based month numbering。释义:使用1月== 0在古代很有用,现在我们坚持使用它。

答案 1 :(得分:2)

http://www.w3schools.com/jsref/jsref_getmonth.asp

  

getMonth()方法返回的月份(从0到11)   指定日期,根据当地时间。

     

注意:1月是0,2月是1,依此类推。

答案 2 :(得分:1)

月份范围 0-11 。即1月份为0,12月为11岁。因此我们需要加1。

Check this