如何用JavaScript确定从现在起一年


111

我正在努力从现在起算是一年了,但是它不起作用。

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中。

谢谢!

Answers:


88

您应该使用getFullYear()而不是getYear()getYear()返回实际年份减去1900(因此非常无用)。

因此,从当前刻起恰好是一年的日期是:

var oneYearFromNow = new Date();
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);

请注意,如果您在2月29日进行日期调整。

同样,您可以通过getMonth()和获得一个从现在开始一个月的日期setMonth()。如果您在12月这样做,则不必担心从当前年度“过渡”到明年。日期将自动调整。通过getDate()和每月的某天也是如此setDate()


1
对于任何想知道如何处理leap年的人,我都是在Firefox控制台中完成的……>> x = new Date('2000-02-29')-> Date 2000-02-29T00:00:00.000Z >> x.setYear(2001)-> 983404800000 >> x.toLocaleFormat('%d-%b-%Y')->“ 2001年3月
Ivan

29
这不是很搞笑吗?要使用JavaScript从现在开始一年的日期,需要写: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Date仅用一条线,这将在未来恰好创造一年。首先,我们fullYear从a 获得new Date,将其递增,将其设置为a的年份new Date。您可能会认为我们会在此处完成操作,但是如果我们停止了操作,它将返回一个时间戳,而不是一个Date对象,因此我们将整个内容包装在一个Date构造函数中。

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

13
setYear()弃用setFullYear()应改为使用。
tsauerwein 2015年

1
一个没有中间变量的衬板即可分配!优秀的!
theUtherSide

1
这将不处理小时,分钟和秒,它将设置为当前时间
Dheeraj

32

由于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)

如果要获取Date对象,所有示例都将返回Unix时间戳-只需将其与另一个包装在一起即可new Date(...)


6

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

这是关键

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/


1
什么是expireDate.getDate()-1的目的是什么?
乌泽(Uzer)


1

使用setFullyear,就像其他人发布的一样,但是请注意,这将返回时间戳值而不是日期对象。通过原型添加功能也是一个不错的选择。这导致我们进入以下模式:

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));

0

以非常简单的方式。使用此代码。

// define function 
function nextYearDate(date1) {
    var date2 = new Date(date1);
    var date3 = date2.setDate(date2.getDate() - 1);
    var date = new Date(date3);
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear()+1;
    var newdate = year + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
    $("#next_date").val(newdate);
}
// call function.
<input type="date" name="current_date" id="current_date" value="" onblur="nextYearDate(this.value);" />

<input type="date" name="next_date" id="next_date" value="" onblur="nextYearDate(this.value);" />

1
到底为什么JQuery在这里举起丑陋的头?jQuery!= JS
Uzer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.