我输出错误的月份有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
答案 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
而不是`子串,这是微妙的不同。