我一直在开发一个Web应用程序Dashboard,我想知道如何检测那是午夜,以便使用jquery或momentjs重置一些包含前一天数据的数组。
答案 0 :(得分:12)
使用以moment().format("h:mm:ss")
格式返回时间的h:mm:ss
。
var midnight = "0:00:00";
var now = null;
setInterval(function () {
now = moment().format("H:mm:ss");
if (now === midnight) {
alert("Hi");
}
$("#time").text(now);
}, 1000);
更好的方法是计算直到午夜的秒数。使用MomentJS非常简单且易读:
// returns the number of seconds until next midnight
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds');
所以,就这样做:
setTimeout(
midnightTask,
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds')
);
function midnightTask() {
/* do something */
}
答案 1 :(得分:5)
只有两种方法可以实现这个目标
(1)已经在其他答案中得到证实,这里是(2)。
首先要做的是calculate the number of milliseconds until midnight,然后将其用作javascripts setTimeout
的参数。
setTimeout(function(){
// whatever you want to do at midnight
}, msToMidnight);
在完成该功能的工作后,您可能想要重新计算 next 午夜的时间并重复该过程。
答案 2 :(得分:3)
所以我认为你以错误的方式解决这个问题。你正在寻找的东西不是午夜,你只想知道什么时候发生了变化,这是一个更简单的任务。
我要说的第一件事就是不惜一切代价避免使用计时器。他们不值得。每天运行相同功能> 3600次所带来的性能损失和额外的CPU时间是荒谬的,特别是当它在别人的计算机上运行时。你不知道它能处理多少,所以假设它根本无法处理。轻松了解您的用户。
我建议听一下用户输入事件,假设这是普通计算机上的内容,而不是something like this,没有用户输入。
如果用户输入事件是您可以依赖的事情,我会这样做..
var today = new Date(), lastUpdate;
window.addEventListener( "mousemove", function () {
var time = new Date();
// If we haven't checked yet, or if it's been more than 30 seconds since the last check
if ( !lastUpdate || ( time.getTime() - lastUpdate.getTime() ) > 30000 ) {
// Set the last time we checked, and then check if the date has changed.
lastUpdate = time
if ( time.getDate() !== today.getDate() ) {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
}
}
} )
如果您绝对需要使用计时器,那么我会这样做..
function init() {
var today = new Date();
var midnight = new Date();
midnight.setDate( today.getDate() + 1 )
midnight.setHours( 0 )
midnight.setMinutes( 0 )
setTimeout( function () {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
init()
}, midnight.getTime() - today.getTime() )
}
init()
请记住,第二种方式可能性要差得多。
答案 3 :(得分:0)
我会尝试:
window.setInterval(resetAtMidnight, 1000*5) // every five seconds
function resetAtMidnight() {
var now = new Date();
if(now.getHours() < 1
&& now.getMinutes() < 1
&& now.getSeconds() < 5 ) {
redrawPage();
}
};
答案 4 :(得分:0)
在今天午夜创建一个日期,添加86400秒,然后设置超时:
new Date(Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000)
以下是您如何使用它:
var delay_to_midnight = Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000 - Date.now()
var timeoutid = window.setTimeout(function() { alert("It's midnight!"); }, delay_to_midnight);