javascript - 处理动态日期差异

标签 javascript node.js date

  1. 我有一个接受持续时间的表格。这可以是一个月、一年、2 个月、20 天等。

  2. 根据此持续时间,将向在此持续时间之前 x 天生日的所有 child 发送一封电子邮件。

  3. 由于一个人出生的月份可能有 28 天、29 天、30 天或 31 天,因此计算日期差异变得很痛苦。

  4. 到目前为止,我所做的是转换月份 -> 30 天,年 -> 365 天,并以此为基础进行计算。

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

最佳答案

添加天、月和年相当简单。添加月份时,只需检查新月份中的日期是否与初始月份相同,如果不是,请将日期设置为 0(即,您已经滚动了一个额外的月份,因此将日期设置为上个月)。增加年份也是如此,但只会发生在二月。例如

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 中。

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

关于javascript - 处理动态日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383308/

相关文章:

javascript - AJAX 单页爬取

javascript - 安装后无法在 Node js 上运行 Zerorpc

java - 为什么特定日期 (03/12/2018) 之间的差异不是确切的天数?

javascript - 显示当前日期前 2 天的日期名称

php - 未选择日期时将 1970-01-01 插入数据库

javascript - 为什么我的标题文本被 chop 了?

javascript - 在将元素属性设置为空字符串之前,如何存储元素属性以供以后使用?

JavaScript 事件处理程序作用域和 this

javascript - 不从后端数据在 html 中呈现 &amp 符号

node.js - Nodejs 使用 mocha 测试图像大小调整