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

向循环中的Javascript日期添加小时数,javascript,datetime,Javascript,Datetime,我在约会中增加了几个小时,得到了一些奇怪的结果。我基本上是在Javascript日期中添加0、6、12、18、24、30等小时。我在网上看到了一些建议(比如:),但在一个循环中,它提前了好几个小时/好几个月。它似乎保留了新版本的日期,只是增加了小时数…而我真的只是想将小时数添加到原始日期 以下是我所拥有的基本知识 for (var i = 1; i < 4; i++) { hour_date.setHours(hour_date.getHours() + hour); output.p

我在约会中增加了几个小时,得到了一些奇怪的结果。我基本上是在Javascript日期中添加0、6、12、18、24、30等小时。我在网上看到了一些建议(比如:),但在一个循环中,它提前了好几个小时/好几个月。它似乎保留了新版本的日期,只是增加了小时数…而我真的只是想将小时数添加到原始日期

以下是我所拥有的基本知识

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)
for(变量i=1;i<4;i++){
hour_date.setHours(hour_date.getHours()+小时);
输出推送(小时/日期…)
}
//在循环中,小时是6、12、18、24等
//其中,hour_date的定义较早,并且
//2017年4月2日星期日12:00:00 GMT-0700(太平洋夏令时)
所以我想知道如何简单地向初始日期变量添加6个小时……这样我就可以将这些值推送到数组中。我理解推动部分…但我只是想在循环中正确地添加小时数


非常感谢您的帮助

每次都需要一个新对象。当前,您正在反复修改同一对象,并将同一引用推送到数组的每个索引

尝试:

for(变量i=1;i<4;i++){
var newDate=新日期(小时/日期);
小时+=6;
newDate.setHours(hour\u date.getHours()+小时);
输出推送(newDate);
}
var hour\u date=new date(),output=[],hour=0;
对于(变量i=1;i<10;i++){
var newDate=新日期(小时/日期);
小时+=6;
newDate.setHours(hour\u date.getHours()+小时);
输出推送(newDate);
}

console.log(JSON.stringify(output,null.))
使用日期的原始值并在毫秒内添加到它可能更简单

例如:

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)
在循环中,必须确保从原始变量创建新变量,而不是修改原始变量。在您的例子中,如果您只需创建新的日期对象并将其插入数组中,那么这很容易。使用
.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"
// ]
var-date=新日期();
日期=[日期];
对于(var i=6;i请尝试此方法

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

什么是“小时”是这种情况吗?另外,您的for语句以var=1开头,您的意思是var i=1吗?是的,很抱歉。谢谢!
setHours
需要一个
0
-
23
范围数。但是他试图将
n?
小时添加到小时中,并且已经定义了小时数。这样行吗?@RokoC.Buljan没有这样的限制@RokoC.Buljan如果你把它放到第二天,假设“hour”是一个常数,我认为这也不太管用。这会推送4个相同的日期,只是不同的实例。你可以做newDate.setHours(hour_date.getHours()+i*hour);
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);