未捕获的TypeError:getFullYear不是函数

时间:2017-08-13 20:08:03

标签: javascript date

我一直收到错误"未捕获的TypeError:date3.getFullYear不是函数"

我有一个SQL和JS格式的日期变量(从另一个函数作为参数传递):

min1 - in SQL format. [Like - '2017-08-13 0:0:00']
mindate - in JS format. [Like - 'Sun Aug 13 2017 00:00:00 GMT+0530 (India Standard Time)' ]

我正在使用这些变量创建一个名为' date3'的新日期变量。我尝试过以下方法:

var date2 = min1.split(' ')[0]; // should give me '2017-08-13'
date3 = new Date(date2);

AND,

var date3 = new Date();
date3 = mindate;

var date3 = mindate;

var Y = parseInt(min1.split(' ')[0].split('-')[0]);       // 2017
var M = parseInt(min1.split(' ')[0].split('-')[1]) - 1;   // 7
var D = parseInt(min1.split(' ')[0].split('-')[2]);       // 13
var date3 = new Date(Y,M,D);

当我在console.log中使用date3时,它会给出正确的日期。但是当我在date3上执行getFullYear()时,它会给出错误:" Uncaught TypeError:getFullYear不是函数"

我已经尝试了一切,似乎没有任何工作。 (我甚至读过其他一些类似的问题,而且有些答案说的是因为' date'是一个'对象,但我不明白这是什么意思以及它是怎样的可以帮助解决这个问题。)

更新:

这是我如何使用getFullYear函数。我尝试了两件事:

datestring = date3.getFullYear() + '-' + (date3.getMonth()+1) + '-' + (date3.getDate());

var y = date3.getFullYear(),
m = date3.getMonth() + 1, // january is month 0 in javascript
d = date3.getDate();

我正在使用这个' for'循环,并在循环上方创建了date3,如下所示:

var date3 = new Date(Y,M,D);
console.log(date3);

for (k=1; k<=x; k++) {

    var y = date3.getFullYear(),
    m = date3.getMonth() + 1, // january is month 0 in javascript
    d = date3.getDate();
    var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
    datestring = [y, pad(m), pad(d)].join("-");
    console.log("DATESTRING", datestring);

    divCode += '<div class="swiper-slide" id="_' + datestring + '" data-hash="' + datestring + '"><b>' +datestring+ '</b><br><br>' +tableCode+ '</div>';

    // Incrementing date by 1
    date3 = date3.setDate(date3.getDate() + 1);


}

1 个答案:

答案 0 :(得分:4)

setDate方法在对象上就位,函数的返回值是新日期的时间戳。

当你这样做时:

date3 = date3.setDate(date3.getDate() + 1);

在你的函数中,date3现在是一个整数(而不是Date()对象),所以你的代码现在基本上做的是1502742691133.getFullYear(),这是错误的。

您不需要将setDate()的值设置为date3。只是做:

date3.setDate(date3.getDate() + 1);