我有一个表格,我接受了一段时间。这可能是一个月,一年,两个月,20天等。
根据这段时间,我们会向所有在此期限前x天过生日的孩子发送电子邮件。
因为一个人可以在一个月内出生28,29,30或31天,这使得计算日期差异变得很痛苦。
到目前为止我所做的是转换月份 - > 30天,年 - > 365天,基于此完成了我的计算。
考虑到不同月份和闰年,处理这种动态日期差异的更优雅的方法是什么?
答案 0 :(得分:1)
你可以使用香草js -
几个月 -
var d = new Date();
d.setMonth(d.getMonth() - x);
多年 -
var d = new Date();
d.setYear(d.getYear() - x);
天 -
var d = new Date();
d.setDate(d.getDate() - x);
答案 1 :(得分:1)
添加天,月和年是相当直接的。添加月份时,只需检查新月份中的日期是否与初始月份相同,如果不是,则将日期设置为0(即您已累计超过一个月,因此请设置日期到上个月末)。添加年份相同,但只会在2月份发生。 E.g。
function addMonths(date, months) {
var d = new Date(+date);
var startDate = d.getDate();
d.setMonth(d.getMonth() + months);
if (d.getDate() != startDate) d.setDate(0);
return d;
}
function addYears(date, years) {
return addMonths(date, years * 12);
}
var d = new Date(2016,4,31);
console.log(d.toLocaleString() + ' plus one month is \n' +
addMonths(d,1).toLocaleString());
d = new Date(2016,1,29);
console.log(d.toLocaleString() + ' plus one year is \n' +
addYears(d, 1).toLocaleString());

为方便起见,您甚至可以将这些作为方法添加到 Date.prototype 。
请注意,日期算术不一定是对称的。