jquery图书馆知道新的一天即将来临

时间:2016-06-23 02:17:39

标签: javascript jquery datetime

我想知道如何使用jqueryothers jquery library来检测或知道新的一天何时到来。

例如:

假设,现在是2016/06/23 23:59:50。当second2016/06/24 00:00:00时,jquery可以检测到event

我知道我们可以使用setTimeOutsetInterval并在新的一天到来时检查每一秒。

但是我不想在上面使用这些方法,我们会检测哪些jquery方法?

2 个答案:

答案 0 :(得分:6)

当日期发生变化时,没有自动事件被触发。您可以做的是计算日期更改之前的时间,并在发生这种情况时使用setTimeout来运行函数。

var now = new Date;
var midnight = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
setTimeout(function() {
    alert("It's tomorrow!");
}, midnight.getTime() - now.getTime());

new Date()的参数是日期和时间的组成部分。省略时间参数会将它们全部默认为0。因此,在日期中添加1并省略时间将返回下一个午夜的时间。

答案 1 :(得分:0)

你可以编写一个JavaScript类来连续采样时间并在事件发生时触发事件。你列出了jQuery,所以让我们用它来处理这些事件。

首先,让我们来制作抽样时间的课程:

function DayChecker() {
    var self = this;
    // Get a copy of now to compare against
    self.lastDate = new Date();
    // A function that compares now to the lastDate, and fires the event
    // if different, and resets the lastDate
    self.sample = function() {
        var tempDate = new Date();
        // Compare the day component of the last sampled time to the
        // current time
        if (self.lastDate.getDay() != tempDate.getDay()) {
            // It changed, so fire the event!
            $(self).triggerHandler('daychange');
        };
        // Update the last sampled date so this can run forever and
        // trigger on every day change
        self.lastDate = tempDate;
    }
    // for illustration, a function that force changes the last date
    // to trigger the event
    self.forceChange = function() {
        // Add 1 day to the last sample time to trip the event
        self.lastDate.setTime(self.lastDate.getTime() + (1 * 86400000));
    };
    // Now start sampling every second (or whatever accuracy you need)
    setInterval(self.sample, 1000);
};

现在我们创建一个这个辅助类的新实例:

var dayChecker = new DayChecker();

听听我打电话给#34; daychange":

的事件
$(dayChecker).on('daychange', function() { 
    alert('new day!'); 
});

最后,运行几秒后更改日期以进行测试的功能:

setTimeout(function() {
    // Testing only!
    dayChecker.forceChange();
}, 5000);

您应该在五秒钟后看到警报。

A jsFiddle