给定两个日期对象,如何将第一个对象的月份正确设置为另一个对象的月份?
我面临的任务是从一个日期对象复制天、月和年到另一个对象。复制天和年正常工作,问题出现在我尝试复制月份时。
使用b.setMonth(a.getMonth())会导致b的月份多1。
然而,使用b.setMonth(a.getMonth() - 1)会导致b的月份比要求的少1。
以下是typescript代码:
我面临的任务是从一个日期对象复制天、月和年到另一个对象。复制天和年正常工作,问题出现在我尝试复制月份时。
使用b.setMonth(a.getMonth())会导致b的月份多1。
然而,使用b.setMonth(a.getMonth() - 1)会导致b的月份比要求的少1。
以下是typescript代码:
let a = new Date(2018, 1, 12);
let b = new Date();
console.log(a);
console.log(b);
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
b.setMonth(a.getMonth());
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
b.setMonth(a.getMonth() - 1);
console.log('====');
console.log(a.getMonth());
console.log(b.getMonth());
返回:
Mon Feb 12 2018 00:00:00 GMT+0100
Thu Aug 29 2019 16:11:03 GMT+0200
====
1
7
====
1
2
====
1
0 // 2 - 1 = 0 ?
表面上看来 (a.getMonth() - 1)
应该会给出1,但是显然Date对象的行为与此不同。在javascript/typescript中,从一个Date对象复制月份的正确方式是什么?我想将两个日期都转换为字符串,复制正确的字符,并将字符串解析回Date对象,这样可以工作,但我想知道是否有更简单、更清晰的方法。
b
具有与a
相同的日期值。如果您也可以复制“时间”(小时、分钟、秒、毫秒),那么您可以简单地使用a.setTime(b.getTime());
。这将有效地将一个日期对象的完整时间戳克隆到另一个日期对象中。您甚至可以在直接构造“a”时执行此操作。const a = new Date(b.getTime());
。此处为setTime()
文档。 - CalebDate
对象通常被认为是令人沮丧的。根据你实际处理日期对象的程度,使用一个库来简化它可能是值得的。我建议看看 luxon。在 JavaScript 中处理日期时,它可以让很多事情变得更加简单。 - Caleb