Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新javascript对象的日期部分而不更改时间部分_Javascript_Date_Datetime - Fatal编程技术网

更新javascript对象的日期部分而不更改时间部分

更新javascript对象的日期部分而不更改时间部分,javascript,date,datetime,Javascript,Date,Datetime,JavaScript中设置JavaScript日期对象的日期部分而不影响时间部分的最佳方法是什么 假设你有这样的约会 2012年10月31日星期三10:15:00 GMT-0400(美国东部时间) 您希望在不更改时间的情况下将其更新为11月1日 乍一看,你会认为这是可行的 exampledate.setFullYear(2012); exampledate.setMonth(10); exampledate.setDate(1); 但结果是 2012年12月1日星期六10:15:00 GMT-

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

假设你有这样的约会
2012年10月31日星期三10:15:00 GMT-0400(美国东部时间)

您希望在不更改时间的情况下将其更新为11月1日

乍一看,你会认为这是可行的

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


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

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

JavaScript日期对象设置器方法通常允许您(可选)根据情况同时设置多个日期/时间组件(除了主组件之外)——这就是您想要做的

对于您的用例,
setFullYear
的语法是
setFullYear(年、月、日)
,因此除了显式设置年份(这将导致基于初始日期隐式更新月份和日期),您还可以在设置月份和日期时显式设置月份和日期。例如:

var d = new Date();
d.setFullYear(2020,10,3);
会回来的

Tue Nov 03 2020 13:10:34 GMT-0500 (EST)
有关更多详细信息,请参阅


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

您是说从EDT到EST的转换吗?如果是这样的话,请记住,在11月4日凌晨2点,使用EDT的国家会在神奇地获得额外一小时的时间的同时切换到EST。此外,您是否应该
setMonth
呼叫是11而不是10?我认为最后的日期是十二月,这就是问题所在。由于最初的日期是2012年10月31日,我将日期设置为2012年11月31日,这不是一个真实的日期,第二行将日期改为12月1日。最后一行没有做任何事情。现在,我看到你的观点:)你可能想考虑使用一个类似的库。@ MichaelMior,不需要一个外部依赖项,这可以用<代码> StestFur年(年,月,日期)< /代码>很棒,我不知道你能做到。