Javascript 从日期对象中减去天/月/年

Javascript 从日期对象中减去天/月/年,javascript,datetime,math,Javascript,Datetime,Math,这是Javascript代码,我使用它来计算给定用户输入日期的到期日期。目前,有效期为原始日期减去一天,原始年份减去X 这段代码的问题在于,首先,它没有考虑无效日期。例如,如果用户提供的日期为“2010年10月1日”,则到期日期为“2013年10月0日”(假设到期日期为+3年) 我可以这样做: var inputDate = '20/4/2010'.split('/'); var dateFormatted = new Date(parseInt(inputDate[2]), parse

这是Javascript代码,我使用它来计算给定用户输入日期的到期日期。目前,有效期为
原始日期减去一天,原始年份减去X

这段代码的问题在于,首先,它没有考虑无效日期。例如,如果用户提供的日期为“2010年10月1日”,则到期日期为“2013年10月0日”(假设到期日期为+3年)

我可以这样做:

var inputDate     = '20/4/2010'.split('/');
var dateFormatted = new Date(parseInt(inputDate[2]), parseInt(inputDate[1]), parseInt(inputDate[0]));

var expiryDate = (dateFormatted.getDate() - 1) + '/' + dateFormatted.getMonth() + '/' + (dateFormatted.getFullYear() + year);
我本来希望
日期对象
能够支持这些计算,但据我所知,似乎不是

Expiry date is: +3 years

User date is: '14/10/2010'
Expiry date is: '31/10/2013'
使用1970年后的秒数可以满足以下条件:-)
哦,你有更多的规则。在这之后,您仍然需要检查这些情况……

也许这对您有用:

查看输入日期是否有效的简单方法:

var currentDate = new Date(year,month,day);
var expiryDate = new Date();
expiryDate.setTime(currentDate.getTime() + (3 * 365 * 24 * 60 * 60 * 1000));
然后,这里是我经常使用的dateAdd函数。扩展日期对象,使其易于使用:

var d = Date.parse('4/20/2010');
if (isNaN(d.valueOf())) {
 alert ("bad date value"); 
}
然后使用:

Date.prototype.dateAdd = function(size,value) {
    value = parseInt(value);
    var incr = 0;
    switch (size) {
        case 'day':
            incr = value * 24;
            this.dateAdd('hour',incr);
            break;
        case 'hour':
            incr = value * 60;
            this.dateAdd('minute',incr);
            break;
        case 'week':
            incr = value * 7;
            this.dateAdd('day',incr);
            break;
        case 'minute':
            incr = value * 60;
            this.dateAdd('second',incr);
            break;
        case 'second':
            incr = value * 1000;
            this.dateAdd('millisecond',incr);
            break;
        case 'month':
            value = value + this.getUTCMonth();
            if (value/12>0) {
                this.dateAdd('year',value/12);
                value = value % 12;
            }
            this.setUTCMonth(value);
            break;
        case 'millisecond':
            this.setTime(this.getTime() + value);
            break;
        case 'year':
            this.setFullYear(this.getUTCFullYear()+value);
            break;
        default:
            throw new Error('Invalid date increment passed');
            break;
    }
}

这里回答了一个类似的问题:

类似的事情可以持续数月或数年

例如

 var d = new Date();
 d.dateAdd('day', -1).dateAdd('year', 3);

对不起,我不完全确定这是怎么回事。。。每个数字代表什么?我该如何使用它来计算给定日期的+4年?我认为这个答案是最好的解决方案,您在示例中解析的日期是蛋糕上的一点糖霜。谢谢只是一个旁注,验证是好的,但是不要用解析的变量d调用原型。显然,您需要将其实例化为日期对象。否则,您将得到“dateAdd,不存在”的愚蠢错误;d、 dateAdd('day',-1)。dateAdd('year',3);我认为这不是正确的解决办法。我想要的人应该是18岁以上的出生日期为基础。试图从当前日期(2014年3月28日)减去18年,该解决方案返回1996年2月28日。我交叉验证了来自的答案,得到的日期是1996年3月28日,所以我认为缺少了一些内容。JavaScript日期对象中的月份是零索引的,所以第2个月是3月。1月=0,2月=1,3月=2等等……怎么还没有达到100票。对于那些不想一直依赖插件,并且希望以更手动的方式实现简单解决方案的人来说,这是一个极好的答案!momentjs.com让这一方式变得更简单:
 var d = new Date();
 d.dateAdd('day', -1).dateAdd('year', 3);
     var date = new Date('2011','01','02');
     alert('the original date is '+date);
     var newdate = new Date(date);
     newdate.setMonth(newdate.getMonth() - 7);
     var nd = new Date(newdate);
     alert('the new date is '+nd);