我三次次,其中两次是字符串形式(time1
和time2
),另一次来自系统日期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)时,没有任何反应。解决这个问题的任何方法?
答案 0 :(得分:1)
这里有一些问题可能会有问题。
您设置了Date
对象,然后想将其与currTime
进行比较:
if (currTime == t1) {
unfortunatley 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 ) {
....
}
等等。