我在日期中添加了几小时后得到了一些奇怪的结果。我基本上在Javascript日期添加0,6,12,18,24,30等小时。我在网上看到了一些建议(例如:Adding hours to Javascript Date object?),但是当它在循环中时,它会在数小时/数月内跳过。它似乎保留了新版本的日期,只是增加了几个小时...当我真的只想将小时数添加到原始日期。
所以,这里是我所拥有的基础知识。
for (var i = 1; i < 4; i++) {
hour_date.setHours(hour_date.getHours() + hour);
output.push(hour_date...)
}
//where hour is 6, 12, 18, 24, etc in a loop
//and where hour_date is defined earlier and is
//Sun Apr 02 2017 12:00:00 GMT-0700 (Pacific Daylight Time)
所以我试图找出如何简单地将6小时添加到初始日期变量...所以我可以将这些值推送到数组。我理解推送部分......但我只是想在循环中正确添加小时数。
非常感谢您的帮助!
答案 0 :(得分:1)
使用日期的原始值并以毫秒为单位添加它可能更简单。
示例:
var date = Date.now()
console.log(new Date(date))
var date2 = new Date(date+1000*60*60*6) // Add 6 hours.
console.log(date2)
var date3 = new Date(date+1000*60*60*3) // Add 3 hours.
console.log(date3)
在循环中,您必须确保从原始变量创建新变量,而不是修改原始变量。在您的情况下,如果您只是创建新的Date对象并将它们插入到数组中,这很容易。使用.valueOf()
访问日期对象的基础数字值。
var date = new Date();
dates = [date];
for(var i = 6; i <= 30; i += 6) {
dates.push(new Date(date.valueOf() + i * 1000 * 60 * 60));
}
console.log(JSON.stringify(dates, null, 4))
// [
// "2017-04-03T00:57:52.420Z",
// "2017-04-03T06:57:52.420Z",
// "2017-04-03T12:57:52.420Z",
// "2017-04-03T18:57:52.420Z",
// "2017-04-04T00:57:52.420Z",
// "2017-04-04T06:57:52.420Z"
// ]
答案 1 :(得分:0)
每次都需要一个新对象。目前,您一遍又一遍地修改同一个对象,并将相同的引用推送到数组的每个索引
尝试:
for (var i= 1; i < 4; i++) {
var newDate = new Date(hour_date);
hour += 6;
newDate.setHours(hour_date.getHours() + hour);
output.push(newDate);
}
var hour_date = new Date(), output = [], hour = 0;
for (var i = 1; i < 10; i++) {
var newDate = new Date(hour_date);
hour += 6;
newDate.setHours(hour_date.getHours() + hour);
output.push(newDate);
}
console.log(JSON.stringify(output, null, ' '))
答案 2 :(得分:0)
尝试此操作
let hours = [6, 12, 18, 24];
let hour_date = new Date;
hours = hours.map(hour=>{
return new Date(hour_date.getTime() + (hour*60*60*1000))
});
console.log(hours);