Javascript Date.setHours()正在修改一个我没有引用的Date对象,使用了错误的日期
Javascript Date.setHours() is modifying a Date object that I did not reference, uses wrong day
我想创建一个间隔几个小时的日期对象列表。因此,在10个小时内,它将是:"星期一,20:00-->星期二,6:00-->星期二,16:00",依此类推。我的想法是使用一个"基准"日期,比如上一个例子中的"星期一20:00",所以"base.setHours(20),base.setHours(30),base_setHours)(40)"可以得到这个结果。
但是,一旦我以某种方式调用setHours(),使Date对象的"day"发生更改,这种更改就是永久性的。所以,在base.setHours(30)之后,base.setHours(40)从周二开始,而不是从周一开始,这正是我想要的。我试图通过使用一个临时变量loopday来修复这种行为,该变量存储真实的原始日期base,但Javascript及时返回以更改base!
例如,此代码的输出:
var base = new Date(2015, 1, 4);
for(var hr = 0; hr < 50; hr += 10)
{
var loopday = base;
loopday.setHours(hr);
window.alert([base.getDay(), base.getHours()]);
}
是"[4,0]、[4,10]、[4、20]、[5,6]、[6,16]、[8,2]"。首先,我希望这一切都是"[4,0]",因为我根本没有接触"天";我只修改了"loopday"。但是,从1月4日改为1月5日后,这个月的日子也错了。应该是"…,[5,6],[5,16],[6,2]"。
在实际操作层面上,我如何修改该代码,使loopday的日期和小时分别为[4,0],[4,10],[4],20],[5],6],[5,16],[6,2]?在理解的层面上,Javascript为什么要修改base,以及是什么原因导致了最后两个输出在一个月的某一天出现了奇怪的行为?
将对Date实例的引用从一个变量分配给另一个变量不会产生副本。你必须明确地制定一个新的日期:
var loopday = new Date(base);
通常,JavaScript中对任何类型对象的引用都是在赋值、函数调用和函数返回中传递的。必须明确复制。
- date对象未在javascript中返回正确的日期值
- Date对象未返回预期年份
- JS:如何将字符串(“2015年3月10日”)转换为Date对象
- Javascript Date 对象因格式而异:yyyy-mm-dd vs mm-dd-yyyy
- 将Date对象转换为毫秒
- 为什么我的Date对象返回当前日期
- Javascript Date对象到日期字符串
- Date对象在Chrome中有效,但在Safari、Firefox或IE中无效
- 如何测试Date对象是否等于特定日期
- 为什么js会从具有特定格式的Date对象中减去一天
- highcharts:将useUTC=true milliseconds转换为javascript Date对象
- 将 JavaScript Date 对象格式化为特定格式
- Javascript Date 对象失败
- Date 对象在尝试计算 IE8 中两个日期之间的时间时返回 NaN
- 如何从字符串构造一个 javascript Date 对象
- 与 API 一起使用时,将 Date 对象存储在数据库中的最佳实践是什么
- 将字符串转换为 JavaScript 的 Date 对象的方法
- 意外的 Javascript Date 对象隐式转换
- Date 对象是否使用过非公历
- 通过 Javascript 中的原型访问 Date 对象的方法