Javascript 处理动态日期差异
我有一张表格,上面有一个期限。这可能是一个月、一年、两个月、20天等等Javascript 处理动态日期差异,javascript,node.js,date,Javascript,Node.js,Date,我有一张表格,上面有一个期限。这可能是一个月、一年、两个月、20天等等 根据这段时间,将向所有在这段时间前x天过生日的孩子发送一封电子邮件 因为,一个人可以在一个月内出生28天、29天、30天或31天,因此计算日期差是一件痛苦的事情 到目前为止,我所做的转换为月->30天,年->365天,并以此为基础进行计算 考虑到不同的月份和闰年,有什么更优雅的方法来处理这种动态的日期差异呢?你可以使用vanilla js来解决这个问题- 数月来—— var d = new Date(); d.setMont
考虑到不同的月份和闰年,有什么更优雅的方法来处理这种动态的日期差异呢?你可以使用vanilla 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);
你可以用香草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);
增加天数、月份和年份是相当直接的。添加月份时,只需检查新月份中的日期是否与初始月份相同,如果不相同,则将日期设置为0(即,您已多滚动了一个月,因此将日期设置为上个月的末尾)。增加年份也一样,但只会发生在2月份。例如
功能添加月份(日期,月份){
var d=新日期(+日期);
var startDate=d.getDate();
d、 设置月(d.getMonth()+个月);
如果(d.getDate()!=startDate)d.setDate(0);
返回d;
}
功能添加年份(日期,年份){
返回月数(日期,年数*12);
}
var d=新日期(2016年4月31日);
console.log(d.toLocaleString()+'加上一个月是\n'+
增加月数(d,1.toLocaleString());
d=新日期(2016年1月29日);
console.log(d.tolocalString()+'加上一年是\n'+
addYears(d,1.tolocalesting())代码>添加天数、月份和年份相当简单。添加月份时,只需检查新月份中的日期是否与初始月份相同,如果不相同,则将日期设置为0(即,您已多滚动了一个月,因此将日期设置为上个月的末尾)。增加年份也一样,但只会发生在2月份。例如
功能添加月份(日期,月份){
var d=新日期(+日期);
var startDate=d.getDate();
d、 设置月(d.getMonth()+个月);
如果(d.getDate()!=startDate)d.setDate(0);
返回d;
}
功能添加年份(日期,年份){
返回月数(日期,年数*12);
}
var d=新日期(2016年4月31日);
console.log(d.toLocaleString()+'加上一个月是\n'+
增加月数(d,1.toLocaleString());
d=新日期(2016年1月29日);
console.log(d.tolocalString()+'加上一年是\n'+
addYears(d,1.tolocalesting())代码>有set和get方法就是为了这个目的。有set和get方法就是为了这个目的。它不处理闰年的情况。从2月29日算起的一年不应该再是2月29日了。它完全适用于所有其他情况,就像我提到的那样。是的,它确实适用,请参见示例。如果你在2016年2月29日的闰年上加上年份,你将再次得到2月29日。非闰年将在2月28日返回。为什么要在可以添加年份的情况下添加月份*12?因为这样可以节省重新执行月份滚动逻辑的时间。此外,还应该验证date是否为date对象,并且也可以在addMonths中进行一次验证它不处理闰年的情况。从2月29日算起的一年不应该再是2月29日了。它完全适用于所有其他情况,就像我提到的那样。是的,它确实适用,请参见示例。如果你在2016年2月29日的闰年上加上年份,你将再次得到2月29日。非闰年将在2月28日返回。为什么要在可以添加年份的情况下添加月份*12?因为这样可以节省重新执行月份滚动逻辑的时间。此外,还应该验证date是否为date对象,并且也可以在addMonths中进行一次验证谢谢,编辑了答案-不管怎么说,这更多的是操纵日期,而不是一开始就创建日期。OP知道这些方法(我想),但问题似乎是,增加一个月,即1月31日到2月31日,调整为3月2日或3日(取决于是否是闰年)。OP正试图解决这些问题。这实际上只是一个月和年的问题,因为天、小时等都是等长的(夏令时边界除外…)。谢谢,编辑了答案-不管怎么说,它更多的是操纵日期,而不是一开始就创建日期。OP知道这些方法(我想),但问题似乎是,加上一个月,即1月31日等于2月31日,调整为3月2日或3日(取决于是否是闰年)。OP正试图解决这些问题。这实际上只是一个月和年的问题,因为天、小时等都是相等的长度(除了夏令时边界…)。