如何从Javascript中确定一年后

我试图从现在开始算起一年,而且这不起作用。

JS:

var now = new Date(); var oneYr = new Date(); oneYr.setYear(now.getYear() + 1); $("#yearFromNow").append(oneYr.toString()); var oneMonth = new Date(); oneMonth.setMonth(now.getMonth() + 1); $("#monthFromNow").append(oneMonth.toString()); 

输出:

 one mo. = Thu Dec 22 112 15:16:01 GMT-0500 (Eastern Standard Time) one yr. = Sun Jan 22 2012 15:16:01 GMT-0500 (Eastern Standard Time) 

今年有Dec 22 112 – ?? 本月正确显示Jan 22 2012

如果你想修补它, http://jsbin.com/alezaj/edit#javascript,html,live 。 这是在Chrome和Firefox。

谢谢!

你应该使用getFullYear()而不是getYear()getYear()返回实际年份减去1900年(所以是相当无用的)。

这将在未来一年内创build一个Date ,只需一行。 首先,我们new Date中获得全年,然后将其增加,并将其设置为new Date的年份。 你可能认为我们会在那里完成,但是如果我们停下来,它会返回一个时间戳,而不是一个Date对象,所以我们把整个事情包装在Date构造函数中。

 new Date(new Date().setFullYear(new Date().getFullYear() + 1)) 

由于setYear()已被弃用,所以正确的变体是:

 // plus 1 year new Date().setFullYear(new Date().getFullYear() + 1) // plus 1 month new Date().setMonth(new Date().getMonth() + 1) // plus 1 day new Date().setDate(new Date().getDate() + 1) 

所有的例子返回Unix的时间戳,如果你想获得Date对象 – 只是用另一个new Date(...)

在这个页面和这里使用一些答案,我想出了自己的答案,因为这些答案都没有完全解决。

这是关键所在

 var startDate = "27 Apr 2017"; var numOfYears = 1; var expireDate = new Date(startDate); expireDate.setFullYear(expireDate.getFullYear() + numOfYears); expireDate.setDate(expireDate.getDate() -1); 

这里有一个JSFiddle,它有一个工作的例子: https ://jsfiddle.net/wavesailor/g9a6qqq5/

像别人发布一样使用setFullyear,但要注意,这会返回一个时间戳值而不是date对象。 通过原型添加function也是一个很好的select。 这导致我们到以下模式:

 Date.prototype.addYears = function(n) { var now = new Date(); return new Date(now.setFullYear(now.getFullYear() + n)); }; console.log('Year from now is', new Date().addYears(1)); 

我想出了一个简单的解决scheme ,将闰年考虑在内。

例如:

 var originalDate = new Date('February 29th, 2016 12:00:00'); var newDate = dateAdd(originalDate, 1, 'years'); // => 'February 28th, 2017 

这也适用于其他时间单位,如天,周,月等