5

在 JavaScript 中设置 JavaScript 日期对象的日期部分而不影响时间部分的最佳方法是什么?

假设你有这样的约会 Wed Oct 31 2012 10:15:00 GMT-0400 (EDT)

并且您想在不更改时间的情况下将其更新为 11 月 1 日。

乍一看,你会认为这行得通,

exampledate.setFullYear(2012);
exampledate.setMonth(10);
exampledate.setDate(1);

但结果是 Sat Dec 01 2012 10:15:00 GMT-0500 (EST)

我认为这样做的原因是 10 月有 31 天,而 11 月只有 30 天。因为这显然不能一直正常工作。我还有哪些其他选择?我必须创建一个新的日期对象吗?

4

2 回答 2

2

首先设置日期,然后设置月份。

于 2012-12-03T18:02:17.060 回答
2

JavaScript Date 对象设置方法通常允许您(可选地)一次设置多个日期/时间组件(除了主要组件),视情况而定——这就是您想要做的。

对于您的用例,语法为setFullYearis setFullYear(year,month,day),因此除了显式设置年份(这将导致月份和日期根据您的初始日期隐式更新)外,您还可以显式设置月份和日期在它。例如:

var d = new Date();
d.setFullYear(2020,10,3);

将返回

Tue Nov 03 2020 13:10:34 GMT-0500 (EST)

有关详细信息,请参阅JavaScript setFullYear() 方法

因为 Date 对象的时间组件(例如小时、分钟、秒、毫秒)不依赖于日期部分(年、月、日期),所以将保留您的初始时间组件。如果您需要随后更新时间组件,您可以setHours()根据需要安全地使用或其他方法,因为不会发生对日期组件的隐式更新。

于 2012-12-03T18:14:16.790 回答