转换日期后添加30天出现Invalid Date错误,原因是什么?
为什么会输出
Invalid Date? 问题根源
错误出在这行代码:
date.setDate(initialDate + 30);
initialDate是一个Date实例,当你把它和数字30相加时,JavaScript会自动将Date对象转为对应的毫秒级时间戳(比如Thu Apr 01 2021 00:00:00对应的时间戳是1617253200000),相加后得到的是一个上千万的超大数字。- 而
setDate()方法的参数要求是当月的日期数值(范围是1-31的整数),传入超出范围的数值会直接导致日期无效,输出Invalid Date。
修正方案
你可以用两种方式正确计算30天后的日期:
方法1:基于原日期的日期值累加
直接在initialDate的副本上调用setDate,传入当前日期值加30:
var date = new Date(initialDate); // 创建原日期的副本,避免修改原对象 date.setDate(date.getDate() + 30);
方法2:通过时间戳计算
获取原日期的毫秒时间戳,加上30天对应的毫秒数(30×24×60×60×1000):
var date = new Date(initialDate.getTime() + 30 * 24 * 60 * 60 * 1000);
额外小提示
你的setStart函数存在逻辑隐患:if语句没有用花括号包裹,导致只有console.log属于判断分支,input = new Date(Date.parse(input));会无条件执行,建议加上花括号规范逻辑:
function setStart(input) { if (!(input instanceof Date)) { console.log('Handling Date String:' + input); input = new Date(Date.parse(input)); } input.setHours(0); input.setMinutes(0); input.setSeconds(0); input.setMilliseconds(0); start = input; return start; }
内容的提问来源于stack exchange,提问作者Tan
相关产品推荐
相关产品推荐

