尝试使用 moment 添加 5 年

Trying to add 5 years using moment

我正在尝试添加最多 5 年,每年它添加我存储它以供稍后显示。

const myDate = moment("2021-07-28", "YYYY-MM-DD");
const valid = myDate.isValid();

const addYear1 = myDate.add(1, 'y');
const firstYear = addYear1;
const addYear2 = firstYear.add(1, 'y');
const addYear3 = addYear2.add(1, 'y');
const addYear4 = addYear3.add(1, 'y');
const addYear5 = addYear4.add(1, 'y');

console.log("Year:", myDate);
console.log("is Year Valid:", valid);
console.log("Adding year1:", addYear1);
console.log("Adding year2:", addYear2);
console.log("Adding year3:", addYear3);
console.log("Adding year4:", addYear4);
console.log("Adding year5:", addYear5);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

所有输出的输出最终都是 2026。我希望是:

Year: 2021
Adding year1: 2022
Adding year2: 2023
Adding year3: 2024
Adding year4: 2025
Adding year5: 2026

尝试以下操作:

const addYear1 = myDate.add(1,'y').format('YYYY'); // 2022
const addYear2 = myDate.add(1, 'y').format('YYYY'); // 2023
const addYear3 = myDate.add(1, 'y').format('YYYY'); // 2024
const addYear4 = myDate.add(1, 'y').format('YYYY'); // 2025
const addYear5 = myDate.add(1, 'y').format('YYYY'); // 2026

只需 re-use 原始 moment 对象并在每次要使用它时修改它。

不确定使用 moment 但使用 vanilla js 你可以使用这个

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

您可以在 Date() 中传递任何字符串以手动设置它。

add 通过添加时间来改变原始时刻 (docs).

每次添加都不是孤立地进行,而是使用同一个对象。您的所有 const 都持有对同一 moment 对象的引用。

要制作 moment 对象的真实副本,您需要使用 clone:

const firstYear = addYear1;
// to 
const firstYear = addYear1.clone();

你的最终结果可能是这样的:

const addYear2 = firstYear.clone().add(1, 'y');
const addYear3 = addYear2.clone().add(1, 'y');
const addYear4 = addYear3.clone().add(1, 'y');
const addYear5 = addYear4.clone().add(1, 'y');

或者只是使用相同的基础对象并添加不同的年份:

const myDate = moment("2021-07-28", "YYYY-MM-DD");
const addYear2 = myDate.clone().add(2, 'y');
const addYear3 = myDate.clone().add(3, 'y');
const addYear4 = myDate.clone().add(4, 'y');
const addYear5 = myDate.clone().add(5, 'y');

另见 this related issue