Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理动态日期差异_Javascript_Node.js_Date - Fatal编程技术网

Javascript 处理动态日期差异

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

我有一张表格,上面有一个期限。这可能是一个月、一年、两个月、20天等等

  • 根据这段时间,将向所有在这段时间前x天过生日的孩子发送一封电子邮件

  • 因为,一个人可以在一个月内出生28天、29天、30天或31天,因此计算日期差是一件痛苦的事情

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


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

    你可以使用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正试图解决这些问题。这实际上只是一个月和年的问题,因为天、小时等都是相等的长度(除了夏令时边界…)。