将今天的日期加一年

132

我正在尝试在今天的日期上添加一年。我正在使用一个不允许您使用标准JavaScript的系统。

例如,为了获取今天的日期,我必须使用:

javascript:now();

我尝试过:

javascript:now(+1);

我之前从未见过这种情况,但需要将今天的日期加一年。

有人用过这种获取当前日期的方法吗?如果有,如何添加一年?


3
可能是如何在Javascript中确定一年后的日期的重复问题。 - rnevius
这不是重复内容。就像我上面所说,无法使用标准的JavaScript方法论。 - Code
3
如果您能提供一些关于此代码执行系统的见解,那将会很有帮助。 - Jon Koops
10个回答

157

使用Date.prototype.setFullYear方法将年份设置为所需值。

例如:

const aYearFromNow = new Date();
aYearFromNow.setFullYear(aYearFromNow.getFullYear() + 1);
console.log(aYearFromNow);

如果您所使用的环境中没有这些方法,那么在 JavaScript 中处理日期就真的没有其他方式了。


如果你想要一个更轻量级的依赖库,可以使用 moment npm 库或 date-fns - a_lovelace
7
@a_lovelace 为什么要使用库,当纯JS同样可以很好地完成同样的工作呢? - 6infinity8
如果你给2020-02-29加上1年,输出结果会是2021-03-01。然而,正确的结果应该是2021-02-28 - undefined

140

您可以使用以下代码创建一个以今天日期为基础的新日期对象:

var d = new Date();
    console.log(d);

// => Sun Oct 11 2015 14:46:51 GMT-0700 (PDT)

如果您想创建一个特定时间的日期,可以传递新的日期构造函数参数。

 var d = new Date(2014);
    console.log(d)

// => Wed Dec 31 1969 16:00:02 GMT-0800 (PST)

如果想要获取今天的日期并加上一年,可以先创建一个日期对象,访问相关属性,然后使用它们来创建一个新的日期对象。

var d = new Date();
    var year = d.getFullYear();
    var month = d.getMonth();
    var day = d.getDate();
    var c = new Date(year + 1, month, day);
    console.log(c);

// => Tue Oct 11 2016 00:00:00 GMT-0700 (PDT)

您可以在 MDN 上了解有关日期对象方法的更多信息。

日期对象


90
没必要创建两个日期对象。 d.setFullYear(d.getFullYear() + 1) 可以用更少的代码完成这项工作。 - RobG
3
但是你也会失去原始的日期。 - Jonah Williams
然后:var d = new Date(+originalDate) 将复制原始日期。 - RobG
12
这在闰年日期上不起作用。例如,如果您输入29/02/2016并添加一年后,它将返回29/02/2017,这是不正确的。 - Renascent
7
@ANP 不会返回不存在的日期29/02/2017,而是返回01/03/2017。需要注意的是,在JavaScript中,2月份被表示为1。我的翻译是否符合您的要求呢? - Roman Starkov
显示剩余2条评论

34

按照建议在此处提供一行代码

如何在JavaScript中确定一年后的日期,作者为JP DeVries

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

或者你可以从某个变量中获取年数:

const nr_years = 3;
new Date(new Date().setFullYear(new Date().getFullYear() + nr_years))

10

这段代码会增加日期所需的年数。

var d = new Date();
// => Tue Oct 01 2017 00:00:00 GMT-0700 (PDT)

var amountOfYearsRequired = 2;
d.setFullYear(d.getFullYear() + amountOfYearsRequired);
// => Tue Oct 01 2019 00:00:00 GMT-0700 (PDT)

5

我喜欢将其放在一行中,您可以使用自调用函数实现,例如:

如果您想要在单行中获取一年后的时间戳

console.log(
  (d => d.setFullYear(d.getFullYear() + 1))(new Date)
)

如果您想用一行代码获得 Date 对象

console.log(
  (d => new Date(d.getFullYear() + 1, d.getMonth(), d.getDate()))(new Date)
)


那很特别。你能为我们解释一下新日期构造函数的传递吗? - mplungjan
只需将(new Date)对象传递给箭头函数即可。 - DC-
那不是简单的事情。对于路人来说,那是一种不明显的魔法 ;) - mplungjan

2
在Angular中,这是如何计算日期的。
today = new Date();
year = this.today.getFullYear();
month = this.today.getMonth();
day = this.today.getDate();
//To go 18 years back
yearsBack18= new Date(this.year - 18, this.month, this.day);

//To go to same day next year
nextYear= new Date(this.year + 1, this.month, this.day);

2
    var d = new Date();
    var year = d.getFullYear();
    var month = d.getMonth();
    var day = d.getDate();

    var fulldate = new Date(year + 1, month, day);

    var toDate = fulldate.toISOString().slice(0, 10);

    $("#txtToDate").val(toDate);

    output : 2020-01-02

0
提供的解决方案在闰年和时区方面无法正常工作。
这里有一个可以解决这两个问题的方案。
使用Date.UTC()可以避免时区的时间影响。
在闰年的情况下,通过最后一行代码处理日期的滚动到下个月。
2020-02-29加一(1)年应该得到2021-02-28,而不是其他解决方案所建议的2021-03-01

function addYears(date,years) {
date = new Date(date);
let day   = date.getDate(),
  newDate = new Date(Date.UTC(date.getFullYear()+years,date.getMonth(),date.getDate(),0));
newDate.getDate() != day && newDate.setDate(0);
return newDate;
}

//===== Test samples =====

console.log(addYears("2020-02-28",1));   // 2021-02-28  T00:00:00.000
console.log(addYears("2020-02-29",1));   // 2021-02-28  T00:00:00.000
console.log(addYears("2020-02-29",12));  // 2032-02-29  T00:00:00.000
console.log(addYears("2020-12-31",12));  // 2032-12-31  T00:00:00.000
console.log(addYears("2020-03-01",24));  // 2044-03-01  T00:00:00.000
console.log(addYears("2020-03-01",-5));  // 2015-03-01  T00:00:00.000


-3

//这段代码将同时处理闰年的加法。

function updateExpiryDate(controlID, value) {
    if ( $("#ICMEffectiveDate").val() != '' &&
        $("#ICMTermYears").val() != '') {

        var effectiveDate = $("#ICMEffectiveDate").val();
        var date = new Date(effectiveDate);
        var termYears = $("#ICMTermYears").val();

        date = new Date(date.setYear(date.getFullYear() + parseInt(termYears)));
        var expiryDate = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
        $('#ICMExpiryDate').val(expiryDate);
    }
}

-6
var yearsToAdd = 5;
var current = new Date().toISOString().split('T')[0];
var addedYears = Number(this.minDate.split('-')[0]) + yearsToAdd + '-12-31';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接