获取错误的日期格式javascript

获取错误的日期格式javascript,javascript,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 = parse

我得到了错误的输出数个月,有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的系统输出为2017年3月1日星期五。


我选了2017年3月2日星期五的3月30日的节目,这是错误的,但我将把它留给子孙后代

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
而不是'substring',这是微妙的不同。

在处理日期时,保持一定的顺序是很重要的。调用
newdate
将返回一个日期对象,其月份为二月。但是当您使用
setDate
将日期设置为29时,JavaScript会将日期更改为01年3月,因为2017年没有2月29日

所以你要么先设定月份,然后设定日期。或者使用以下代码:

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

setMonth方法有一个可选的第二个参数,用于月份的日期。如果没有,则使用getDate(),并且日期仍然不完整

因此,这应该解决问题:

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

很公平,我想到的是
substr
,它具有所描述的行为。哎呀