我有一段代码可以执行此操作:
如果它在0000到0600之间,它将显示“夜晚”。如果它在0600和1200之间,它将显示“早晨”。如果它在1200到1800之间,它显示“下午”,并在1800到2400“晚上”。
然而,我想要它做的是显示数组中的 next 条目,而不是当前条目。所以,在0600到1200之间它应该显示“下午”而不是“早晨”。
这是我的代码:
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var wv = today.getDay();
var hv = 100 * h + m;
var wv1 = new Array();
wv1[0] = '0000,0600,Night';
wv1[1] = '0600,1200,Morning';
wv1[2] = '1200,1800,Afternoon';
wv1[3] = '1800,2400,Evening';
if (wv == 1) {
wv1.forEach(function(entry) {
var schedule = entry.split(',');
if (hv >= schedule[0] && hv <= schedule[1]) {
var timeofday = schedule[2];
//Schedule
document.getElementById('day').innerHTML = timeofday;
}
});
}
}
<body onload="startTime()">
<div id="main-wrapper">
<div id="day"></div>
</div>
</body>
答案 0 :(得分:3)
我的做法略有不同:
startTime();
function startTime(){
var hours = new Date().getHours();
var i = Math.floor(hours/6);
var timeofday = ['Morning','Afternoon','Evening','Night'][i];
document.getElementById('day').innerHTML = timeofday;
}
<div id="day"></div>
每小时演示
function startTime(hours){
var i = Math.floor(hours/6);
var timeofday = ['Morning','Afternoon','Evening','Night'][i];
return timeofday;
}
for(var h=0; h<24; h++){
document.body.innerHTML += h +'h => '+ startTime(h) +'<br>';
}
答案 1 :(得分:1)
我不确定为什么你的代码不必要地复杂化。为什么不使用类似的东西:
var today = new Date();
var message;
if(today.getHours() <= 6) message = "Morning"
// etc
答案 2 :(得分:0)
只需添加一项检查,看看下一个索引是否超过了长度。如果是,则使用0.否则使用下一个索引。
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var wv = today.getDay();
var hv = 100 * h + m;
var wv1 = new Array();
wv1[0] = '0000,0600,Night';
wv1[1] = '0600,1200,Morning';
wv1[2] = '1200,1800,Afternoon';
wv1[3] = '1800,2400,Evening';
if (wv == 1) {
wv1.forEach(function(entry, index) {
var schedule = entry.split(',');
if (hv >= schedule[0] && hv <= schedule[1]) {
var nextTime = wv1[index >= wv1.length - 1 ? 0 : ++index];
var timeofday = nextTime.split(',')[2];
//Schedule
document.getElementById('day').innerHTML = timeofday;
}
});
}
}
<body onload="startTime()">
<div id="main-wrapper">
<div id="day"></div>
</div>
</body>
答案 3 :(得分:0)
在当前设置中获取下一个块的最简单方法是简单地将600添加到当前时间:
var hv = (600 + 100 * h + m) % 2400;
当然对于其他设置/对象,其他解决方案也是可行的,但是仍然可以通过这种方式完成下一个块,而无需额外调用“下一个”索引
答案 4 :(得分:0)
至于CodeOcelot的观点,你接近的方式比必要的更复杂,但我会回答这个问题,假设你需要遵循这个特定的模型。
解决方案:我会添加array
参数,以便与index
一起访问当前数组,以访问下一个项目。
if (wv == 1) {
wv1.forEach(function(entry, index, array) {
var schedule = entry.split(',');
var nextItem = array[index++].split(',');
if (hv >= schedule[0] && hv <= schedule[1]) {
var nextTime = wv1[index >= wv1.length ? 0 : ++index];
var timeofday = nextItem[2];
//Schedule
document.getElementById('day').innerHTML = timeofday;
}
});
}
}
希望这有帮助!
答案 5 :(得分:0)
你在百年之前就像某人一样编写代码(开玩笑)。请聪明而简短。 (顺便说一句:我喜欢CodeOcelot的简单if语句)。
另一种更具说明性的方法可以是这种方法(并且没有使每个代码更复杂的if语句)。这可以完成,因为名称对于时钟数是多余的。
var names = ["Night","Morning","Afternoon","Evening"]
var index = Math.floor(new Date().getHours() * names.length / 24)
document.getElementById('day').innerHTML = names[index];