检测午夜和重置数据的最佳方法

Jua*_*dim 9 javascript jquery momentjs

我一直在开发一个Web应用程序仪表板,我想知道如何检测这是午夜,以便使用jquery或momentjs重置一些包含前一天数据的数组.

Ion*_*zău 14

用于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);
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

更好的方法是计算直到午夜的秒数.使用MomentJS非常简单且易读:

// returns the number of seconds until next midnight
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds');
Run Code Online (Sandbox Code Playgroud)

那么,就这样做:

setTimeout(
   midnightTask,
   moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds')
);

function midnightTask() {
  /* do something */
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


Jam*_*iec 5

只有两种方法可以实现这一目标

  1. 每x秒轮询一次,看看我们是否在午夜的x秒内
  2. 计算从现在到午夜之间的时间,并在执行前睡眠该时间

(1)已经在其他答案中得到证明,这里是(2).

首先要做的是计算到午夜之前的毫秒数,然后将其用作javascripts的参数setTimeout.

setTimeout(function(){
  // whatever you want to do at midnight
}, msToMidnight);
Run Code Online (Sandbox Code Playgroud)

在完成该功能的工作后,您可能希望重新计算到下一个午夜的时间并重复该过程.