【问题标题】:Updating the date portion of a javascript object without changing the time portion更新 javascript 对象的日期部分而不更改时间部分
【发布时间】:2012-12-03 17:59:43
【问题描述】:

在 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 天。因为这显然并不总是正确的。我还有哪些其他选择?我需要创建一个新的日期对象吗?

【问题讨论】:

  • 您说的是从 EDT 到 EST 的转换吗?如果是这样,请记住,在 11 月 4 日凌晨 2 点,使用 EDT 的国家/地区切换到 EST,同时神奇地获得了额外的时间。
  • 另外,您是否应该将setMonth 称为 11 而不是 10?我认为最后的日期是 12 月。
  • 这就是问题所在。由于原始日期是 2012 年 10 月 31 日,而我将日期设置为 2012 年 11 月 31 日,这不是实际日期,因此第二行将日期设置为 12 月 1 日。最后一行什么也没做。
  • 啊,我现在明白你的意思了 :) 你可能想考虑使用像 Moment.js 这样的库。
  • @MichaelMior,不需要外部依赖,这可以使用setFullYear(year,month,date)本地完成

标签: javascript date datetime


【解决方案1】:

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

对于您的用例,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() 或其他需要的方法,因为不会发生对日期组件的隐式更新。

【讨论】:

  • 太棒了,我不知道你能做到。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2019-07-01
    • 2020-09-28
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2022-07-23
    相关资源
    最近更新 更多