得到错误的日期格式javascript

时间:2017-02-16 09:05:51

标签: javascript

我输出错误的月份有29,30,31。请帮助谢谢。

    //EFFDATE = 29/03/2017;

    EFFDATE = document.mainform2.EFFDATE.value;
    var dayOfDate   = parseFloat(EFFDATE.substring(0,2));
    var monthOfDate = parseFloat(EFFDATE.substring(3,5));
    var yearOfDate  = parseFloat(EFFDATE.substring(6,10));

    var date1 = new Date;
    var date2 = new Date;
    date1.setDate(dayOfDate);
    date1.setMonth(monthOfDate -1);
    date1.setFullYear(yearOfDate);
    console.log(date1); 

例如,我选择3月29日,date1的系统输出为friday march 01 2017.

我选择3月30日显示friday march 02 2017

3 个答案:

答案 0 :(得分:2)

在操作日期时保持特定顺序非常重要。调用new Date将返回月份2月的日期对象。但是当您使用setDate将日期设置为29时,JavaScript会将日期更改为3月01日,因为2017年没有2月29日。

所以你要么必须先设定月份,要么设定当天。或者只使用此代码:

var EFFDATE = 29/03/2017;
new Date(EFFDATE.split('/').reverse().join('-'));

答案 1 :(得分:0)

setMonth方法有一个可选的第二个参数,用于该月的某一天。如果不存在,则使用getDate(),日期仍然不完整。

所以这应解决问题:

date1.setMonth(monthOfDate-1, dayOfDate);
date1.setFullYear(yearOfDate);

答案 2 :(得分:-1)

错了,但我会把它留给后人

substring的第二个参数应该是您不想要索引的字符数。

如果您调试了这个并查看了EFFDATE.substring(3,5)的值,那么您可能会想到03/20而不是03

var dayOfDate   = parseFloat(EFFDATE.substring(0,2));
var monthOfDate = parseFloat(EFFDATE.substring(3,5));
var yearOfDate  = parseFloat(EFFDATE.substring(6,10));

应该是:

var dayOfDate   = parseFloat(EFFDATE.substring(0,2));
var monthOfDate = parseFloat(EFFDATE.substring(3,2));
var yearOfDate  = parseFloat(EFFDATE.substring(6,4));

<强>更新

我在考虑substr而不是`子串,这是微妙的不同。