获取错误的日期格式javascript
我得到了错误的输出数个月,有29,30,31。请帮忙,谢谢获取错误的日期格式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
//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
,它具有所描述的行为。哎呀