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