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 带有Moment.JS的JS间隔生成函数:意外输出_Javascript_Date_Time_Momentjs - Fatal编程技术网

Javascript 带有Moment.JS的JS间隔生成函数:意外输出

Javascript 带有Moment.JS的JS间隔生成函数:意外输出,javascript,date,time,momentjs,Javascript,Date,Time,Momentjs,我一直在研究一个函数,它通过一个循环生成一个十局的数组(对象有开始和结束时间)。比如说 比赛周一上午12:00开始,周六上午12:00结束 这场比赛由10个12小时的局组成 第一局开始于周一上午12:00,结束于当天下午12:00,第二局开始 你明白了。时间是与时间保持一致的 我已经编写了我希望能够处理此问题的代码,但功能已经中断。请参阅底部的功能逻辑注释。下面是一个示例,下面是函数: //定义游戏的时间范围 var Game=新对象();//保存所有游戏数据的对象 var end={//

我一直在研究一个函数,它通过一个循环生成一个十局的数组(对象有开始和结束时间)。比如说

  • 比赛周一上午12:00开始,周六上午12:00结束
  • 这场比赛由10个12小时的局组成
  • 第一局开始于周一上午12:00,结束于当天下午12:00,第二局开始
你明白了。时间是与时间保持一致的

我已经编写了我希望能够处理此问题的代码,但功能已经中断。请参阅底部的功能逻辑注释。下面是一个示例,下面是函数:


//定义游戏的时间范围
var Game=新对象();//保存所有游戏数据的对象
var end={//游戏什么时候结束?
“瞬间”:瞬间().天(6).小时(0).分钟(0).秒(0)
};
var start={//游戏什么时候开始?
“瞬间”:瞬间().天(1).小时(0).分钟(0).秒(0)
};
//为了调试,我将在这里重复评论:
//为每10局分配开始和结束时间
函数generateInnings(){
//创建一个局对象以指定开始和结束
var inning=新对象();
//创建阵列以将10个局对象中的每一个分配给
Game.innings=新阵列();
//计算游戏时间跨度的快捷方式
var gameHours=120;
//一场比赛打十局,每局多少小时?
var inningHours=游戏时数/10;
//对于x的10个间隔,每局生成
对于(x=0;x<10;x++){
//第一局什么时候开始?
inning.start=开始.moment.add(“小时”,(inningHours*x));
//一局何时结束?
inning.end=inning.start.add(“小时”,inningHours);
//将局对象附加到Game.innings数组
局数[x]=局数;
//JSIDLE输出
日志(“局数”+x+开始:“+Inning.start.calendar());
//JSIDLE输出
日志(“局数”+x+”结束:“+Inning.end.calendar());
}
}
生成内嵌();

结果:

  • 第0局开始:上周一下午12:00
  • 第0局结束:上周一下午12:00
  • 第一局开始:上周二下午12:00
  • 第一局结束:上周二下午12:00
  • 第二局开始:上周四上午12:00
  • 第二局结束:上周四上午12:00
  • 。。。我们需要更进一步吗

是什么导致这种(非常)不正确的输出?


功能逻辑(这不是代码,而是注释):

开始时间=周一上午12:00
对于(x=0;x而言,问题在于:

inning.end=inning.start.add(“小时”,inningHours);

add()
方法不返回值,而是修改它自己的对象,因为

相反,要:


inning.end=时刻(inning.start)。添加(“小时”,inningHours)现在,我很喜欢TWX。你为什么不考虑使用它们呢?好吧,我在看TWX,我已经得到了一个瞬间设置的范围。我想我看到了下一次如何使用TWX使代码更流畅,但是不幸的是,这里的问题似乎与范围无关。不过请提一下!有人看到了吗?没有这个,我已经走到了死胡同了。几乎可以肯定的是,这是当前语法的问题,我继续做的任何更改都不会让我接近预期的结果。
//Define the Game's Time Frame

var Game = new Object(); // Object that holds all game data

var end = { // what time does the game end?
    "moment": moment().days(6).hour(0).minute(0).second(0)
};

var beginning = { // what time does the game start?
    "moment": moment().days(1).hour(0).minute(0).second(0)
};

// I'm going to over-do the commenting here for debugging:

// assign start and end times to each of 10 innings
function generateInnings() { 

    // create an inning object to assign start and end to
    var inning = new Object(); 

    // create array to assign each of 10 inning objects to
    Game.innings = new Array(); 

    // shortcut for calculating game time span
    var gameHours = 120; 

    // ten innings in a game. how many hours each?
    var inningHours = gameHours / 10; 

    // for 10 intervals of x, generate each inning
    for (x = 0; x < 10; x++) { 

        //inning starts when?
        inning.start = beginning.moment.add("hours", (inningHours * x)); 

        // inning ends when?
        inning.end = inning.start.add("hours", inningHours);

        // attach inning object to Game.innings array
        Game.innings[x] = inning; 

        // JSFiddle Output
        log("Inning " + x + " Starts: " + inning.start.calendar()); 

        // JSFiddle Output
        log("Inning " + x + " Ends: " + inning.end.calendar()); 

    }

}

generateInnings();
beginning = 12:00AM Mon

for (x=0;x<10;x++){ //do this x10

    start = beginning plus (12hrs * current loop interval)

    console.log("Inning" + current loop interval + " start: " + start);
}