我想在javascript中针对特定日期和时间触发事件。例如,
如果当前日期和时间是19-11-2015 10:00 AM,并且我在19-11-2015上午10:30设置了计时器,那么它应该在30分钟后开火。这里设定的计时器日期也可能在两天之后。
我目前的代码如下。
setTimer :function(hr , min){
var d1 = new Date();
var d2 = new Date();
console.log("Time 1 "+d1.getTime());
d2.setMinutes(d1.getMinutes() + min);
d2.setHours(d1.getHours() + hr);
console.log("Time 2 "+d2.getTime());
setTimeout(function(){
alert("called");
},d2.getTime());
alert("Before " + d1.getDate() + " - "+d1.getMonth() + " - "+d1.getFullYear() + "<>"+d1.getHours()+ ":"+d1.getMinutes()
+ "\n" +
"After " + d2.getDate() + " - "+d2.getMonth() + " - "+d2.getFullYear() + "<>"+d2.getHours()+ ":"+d2.getMinutes() );
},
我用setTimer(0,1);
调用它来在一分钟后启动一个计时器,但它没有被解雇。
答案 0 :(得分:4)
找出使用Date函数剩余的时间,然后将其传递给setTimeout函数。不需要继续检查时间。
$(document).ready(function(){
var d = new Date("November 19, 2015 17:00:00");
var d1 = new Date();
var timelimit = (d.getTime() - d1.getTime());
if(timelimit > 0) {
setTimeout(function(){
console.log(12345);
},timelimit);
}
});
答案 1 :(得分:0)
使用setTimeout
https://fiddle.sencha.com/#fiddle/11b9来创建计时器。
您最好使用setInterval
并检查您是否已达到正确的时间。
function setTimer(hours, minutes) {
var now = Date.now();
// work out the event time in ms
var hoursInMs = hours * 60 * 60 * 1000,
minutesInMs = minutes * 60 * 1000;
var triggerTime = now + hoursInMs + minutesInMs;
var interval = setInterval(function() {
var now = Date.now();
if(now >= triggerTime) {
alert('timer!');
// clear the interval to avoid memory leaks
clearInterval(interval);
}
}, 0);
}
如果您使用not a reliable way将日期作为自纪元以来的毫秒数返回,那么您将为自己省去很多麻烦。然后你可以用数字来处理问题,而不是弄乱日期api。