首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理动态日期差异

问处理动态日期差异
EN

Stack Overflow用户
提问于 2016-09-08 05:40:27
回答 2查看 63关注 0票数 0
  1. 我有一份接受期限的表格。这可能是一个月,一年,两个月,20天等。
  2. 基于这段时间,一封电子邮件将发送给所有在此期限之前有生日x天的孩子。
  3. 由于一个人可以在一个月内出生,有28天、29天、30天或31天,因此计算日期差异是一种痛苦。
  4. 到目前为止,我所做的是转换月份-> 30天,年份-> 365天,并以此为基础进行计算。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 05:56:41

加上几天、几个月和几年是相当直接的。添加月份时,只需检查新月份中的日期是否与最初的月份相同,如果不是,则将日期设置为0(也就是说,您已经超过一个多月,因此将日期设置为前一个月的月底)。加年数也一样,但只会在二月份发生。例如。

​

代码语言:javascript
复制
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中。

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

票数 1
EN

Stack Overflow用户

发布于 2016-09-08 05:55:59

你可以用香草js来做这个-

几个月来-

代码语言:javascript
复制
var d = new Date();
d.setMonth(d.getMonth() - x);

多年来-

代码语言:javascript
复制
var d = new Date();
d.setYear(d.getYear() - x);

几天来-

代码语言:javascript
复制
var d = new Date();
d.setDate(d.getDate() - x);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39383308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档