处理动态日期差异

时间:2016-09-08 05:40:27

标签: javascript node.js date

  1. 我有一个表格,我接受了一段时间。这可能是一个月,一年,两个月,20天等。

  2. 根据这段时间,我们会向所有在此期限前x天过生日的孩子发送电子邮件。

  3. 因为一个人可以在一个月内出生28,29,30或31天,这使得计算日期差异变得很痛苦。

  4. 到目前为止我所做的是转换月份 - > 30天,年 - > 365天,基于此完成了我的计算。

  5. 考虑到不同月份和闰年,处理这种动态日期差异的更优雅的方法是什么?

2 个答案:

答案 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

请注意,日期算术不一定是对称的。