javascript 一天中某个时间发生的火灾事件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6855953/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Fire event at a certain time of the day
提问by ca8msm
Is it possible with javascript (jQuery solutions are fine too) to fire an event/call a function at certain times of the day e.g.
是否可以使用 javascript(jQuery 解决方案也很好)在一天中的某些时间触发事件/调用函数,例如
call myFunctionA at 10:00
在 10:00 调用 myFunctionA
call myFunctionB at 14:00 etc..
在 14:00 等调用 myFunctionB。
Thanks
谢谢
Mark
标记
回答by hungryMind
- Get current time
- Get in milliseconds, the time difference between next execution time minus current time
- Settimeout with result millisecons
- 获取当前时间
- 获取以毫秒为单位,下次执行时间减去当前时间的时间差
- 带结果毫秒的设置超时
回答by Tiha
I ran into this problem and came up with a more elaborate solution. The basic idea is the same as in the other answers: use setTimeout()
with an interval from now to the desired time point.
我遇到了这个问题并想出了一个更详细的解决方案。基本思想与其他答案相同:使用setTimeout()
从现在到所需时间点的间隔。
Other details used here: if the time point is in the past, schedule it for tomorrow (at time point + 24 hours). Trigger the function at the given time point every day from now using setInterval()
.
Note: DST is not considered here.
此处使用的其他详细信息:如果时间点在过去,则将其安排在明天(时间点 + 24 小时)。从现在开始,每天在给定的时间点使用setInterval()
. 注意:此处不考虑 DST。
Input params:time = '16:00';
triggerThis = function() { alert('this was triggered'); };
输入参数:time = '16:00';
triggerThis = function() { alert('this was triggered'); };
scheduleWarning(time, triggerThis) {
// get hour and minute from hour:minute param received, ex.: '16:00'
const hour = Number(time.split(':')[0]);
const minute = Number(time.split(':')[1]);
// create a Date object at the desired timepoint
const startTime = new Date(); startTime.setHours(hour, minute);
const now = new Date();
// increase timepoint by 24 hours if in the past
if (startTime.getTime() < now.getTime()) {
startTime.setHours(startTime.getHours() + 24);
}
// get the interval in ms from now to the timepoint when to trigger the alarm
const firstTriggerAfterMs = startTime.getTime() - now.getTime();
// trigger the function triggerThis() at the timepoint
// create setInterval when the timepoint is reached to trigger it every day at this timepoint
setTimeout(function(){
triggerThis();
setInterval(triggerThis, 24 * 60 * 60 * 1000);
}, firstTriggerAfterMs);
}
回答by Stefan H?ltker
/**
* This Method executes a function certain time of the day
* @param {type} time of execution in ms
* @param {type} func function to execute
* @returns {Boolean} true if the time is valid false if not
*/
function executeAt(time, func){
var currentTime = new Date().getTime();
if(currentTime>time){
console.error("Time is in the Past");
return false;
}
setTimeout(func, time-currentTime);
return true;
}
$(document).ready(function() {
executeAt(new Date().setTime(new Date().getTime()+2000), function(){alert("IT WORKS");});
});
回答by jmav
4html:
4html:
current date: <span id="cd"></span><br />
time to Alarm: <span id="al1"></span><br />
alarm Triggered: <span id="al1stat"> false</span><br />
javascript:
javascript:
var setAlarm1 = "14"; //14:00, 2:00 PM
var int1 = setInterval(function(){
var currentHour = new Date().getHours();
var currentMin = new Date().getMinutes();
$('#cd').html(currentHour + ":" + currentMin );
$('#al1').html(setAlarm1 - currentHour + " hours");
if(currentHour >= setAlarm1){
$('#al1stat').html(" true");
clearInterval(int1);
//call to function to trigger : triggerFunction();
}
},1000) //check time on 1s
Sample at: http://jsfiddle.net/yhDVx/4/