javascript - 在不更改时间部分的情况下更新 javascript 对象的日期部分

标签 javascript date datetime

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

假设你有一个这样的约会 2012 年 10 月 31 日星期三 10:15:00 GMT-0400 (EDT)

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

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

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

但是结果是 2012 年 12 月 1 日星期六 10:15:00 GMT-0500(美国东部时间)

我认为这是因为 10 月有 31 天而 11 月只有 30 天。因为这显然不是一直都有效。我的其他选择是什么?我必须创建一个新的日期对象吗?

最佳答案

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

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

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

会回来

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

参见 the JavaScript setFullYear() method了解更多详情。

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

关于javascript - 在不更改时间部分的情况下更新 javascript 对象的日期部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689023/

相关文章:

javascript - 在 *ngFor 中创建唯一的变量名

javascript - 右键单击网站上的链接时缺少“在新选项卡中打开链接”选项

java - SimpleDateFormat 添加几分钟

mysql - 如何使用字符串/列值作为 mysql 日期间隔常量(DAY、MONTH ...)?

r - R中的日历日期算术

javascript - 如何更改 "animal"的原型(prototype)并添加方法 "sayName"到打印语句

javascript - CSS - 输入足够的字符时扩展搜索栏问题

java - 获取不同时区的相同日期

arrays - swift 过滤器数组产生重复项(如何删除过滤器重复项)

php - php中的时区转换