我正在尝试根据一天中的时间更新html元素中的内容,我正在做类似于这样的事情:根据时间更新div内容,但我希望内容在没有页面刷新的情况下更新
代码:function schoolPeriod() {
var date = new Date();
var h = date.getHours();
var m = date.getMinutes();
// prepend minutes with 0 if < 10
if (m < 10) {
m = "0" + m;
}
h = h.toString();
m = m.toString();
var t = h + m;
var periods = [
"school assembly",
"first period",
"second period",
];
var currentPeriod = document.querySelector('.current-period');
if (t >= 600) {
currentPeriod.innerHTML = "new school day";
}
else if (t >= 900) {
currentPeriod.innerHTML = periods[0];
}
else if (t >= 940) {
currentPeriod.innerHTML = periods[1];
}
else if (t >= 1020) {
currentPeriod.innerHTML = periods[2];
}
setTimeout(schoolPeriod, 1000);
}
schoolPeriod();
codepen: http://codepen.io/carpenumidium/pen/grRYoN?editors=1011
我做错了什么?谢谢你的帮助!
您需要颠倒您的if/else if/else if/else if
测试的顺序。
为什么?假设t
是1020。t >= 600
的当前if
条件将为真,因此将执行该块而不是任何else if
块(即使跳过if
, 1020也大于900和大于940…)如果测试一系列>=
条件,您需要从测试最高可能性开始。(您可能还想考虑在上午6点之前添加最后的else
语句。)
同样,t = h + m
也不像你期望的那样,因为它不允许一位数的分钟(如果时间是10:03 am,那么h + m将是103)。不将小时和分钟转换为字符串,而是将小时乘以100:
var t = h * 100 + m;
请注意,乘以100并不能给你多少分钟,它只是让你更容易与600
在早上6点进行比较,等等。
(您还可以做其他事情来使函数更短、更可扩展,但我所讨论的问题是阻止它以当前形式工作的事情。)
试试这个:
function schoolPeriod() {
var date = new Date();
var h = date.getHours();
var m = date.getMinutes();
var t = (h * 60) + m;
var selectedIndex = 0;
if (t >= 620) {
selectedIndex = 3;
}
else if (t >= 580) {
selectedIndex = 2;
}
else if (t >= 540) {
selectedIndex = 1;
}
var periods = [
"new school day",
"school assembly",
"first period",
"second period",
];
document.querySelector('.current-period').innerHTML = periods[selectedIndex];
setTimeout(schoolPeriod, 1000);
}
schoolPeriod();
if then else语句是错误的。总是check
(t >= 600)
用你的替换:
function schoolPeriod() {
var date = new Date();
var h = date.getHours();
var m = date.getMinutes();
h = h.toString();
m = m.toString();
var t = h + m;
var periods = [
"school assembly",
"first period",
"second period",
];
var currentPeriod = document.querySelector('.current-period');
if (t >= 600 && t< 900) {
currentPeriod.innerHTML = "new school day";
}
else if (t >= 900 && t<940) {
currentPeriod.innerHTML = periods[0];
}
else if (t >= 940 & t<1020) {
currentPeriod.innerHTML = periods[1];
}
else if (t >= 1020) {
currentPeriod.innerHTML = periods[2];
}
setTimeout(schoolPeriod, 1000);
}
// Call the function
schoolPeriod();
希望对你有帮助
尝试这样做,周期以分钟为单位设置- 360 = 6:00
var periods = [
['period 1',360,365],
['period 2',365,400],
['period 3',400,460],
['period 4',460,520]
];
function getPeriod(){
var period = 'School is closed';
var minutes = new Date().getHours()*60 + new Date().getMinutes();
for(var i=0;i<periods.length;i++){
if(minutes>=periods[i][1] && minutes<periods[i][2]){
period = periods[i][0];
break;
}
}
document.getElementById('period').innerHTML = period;
setTimeout(getPeriod,1000);
}
<html>
<head>
</head>
<body onload="getPeriod();">
<div id="period"></div>
</body>
</html>