无法根据时间打印消息

Cannot print message according to time

本文关键字:打印 消息 时间      更新时间:2023-09-26

我有三个不同的时间,其中两个是字符串形式(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");
    }
}

问题:当系统时间达到其中一次(时间1或时间2)时,不会发生任何事情。这个问题有什么解决办法吗?

这里有一些问题。

您设置了一个Date对象,然后希望将其与currTime:进行比较

if (currTime == t1) {

Untunatley 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 ) {
    ....
}

等等。