在循环中向Javascript日期添加小时数

时间:2017-04-02 22:10:34

标签: javascript datetime

我在日期中添加了几小时后得到了一些奇怪的结果。我基本上在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小时添加到初始日期变量...所以我可以将这些值推送到数组。我理解推送部分......但我只是想在循环中正确添加小时数。

非常感谢您的帮助!

3 个答案:

答案 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);