0

我有三个不同的时间,其中两个是字符串形式(time1time2),一个来自系统日期currDate。下一步根据上述两个时间之一,我想在系统日期达到其中一个时打印消息。为此,我function callEachMinute每分钟调用一次以获取系统时间(但在代码中我没有包括整个过程)。这是代码的当前状态:

脚本:

function callEachMinute() {
    var currDate = new Date();
    var time_1 = '8:30';
    var time_2 = '23:00';

    timeComparison(currDate, time_1, time_2)
}

function timeComparison(currTime, time1, time2) {

    // Time 1 formatting
    var t1 = new Date();
    var parts1 = time1.split(":");
    t1.setHours(parts1[0],parts1[1]);

    // Iftor-Time formatting
    var t2 = new Date();
    var parts2 = timeI.split(":");
    t2.setHours(parts2[0],parts2[1]);

    /* Notification procedure */
    if (currTime == t1) {
        // Message for Time1
        alert("Time 1 is reached");
    }

    if (currTime == t2) {
        // Message for Time2
        alert("Time 2 is reached");
    }
}

问题: 当达到系统时间之一(time1 或 time2)时,什么也没有发生。这个问题有什么解决办法吗?

4

1 回答 1

1

这里有几件事可能会出现问题。

您设置了一个Date对象,然后想将其与以下内容进行比较currTime

if (currTime == t1) {

不幸的是==,当应用于对象时,Javascript 的运算符会比较两个对象以查看它们是否是对同一对象的引用,因此即使 currTime 和 t1 包含完全相同的时间,此检查也会评估为 false,因为它们是不同的实例。您可以通过转换为字符串来做到这一点:

if (currTime.toString() == t1.toString) {

如果每个数据的字符串表示形式相同,这将起作用。

但是,更直接的方法可能是反过来解决这个问题 - 从 currTime 中提取小时和分钟,构建一个字符串并将其与您的时间字符串进行比较。就像是:

// in timecomparison function
var hrs = currTime.getHours();
var mins = currTime.getMinutes();
var now = hrs+":"+mins

// now do comparisons
if (now == time1 ) {
    ....
}

等等。

于 2013-07-16T11:02:33.100 回答