繁体   English   中英

javascript比较两次

[英]javascript compare Two Times

尝试使其在16:30:00和17:30:00之间更改,以更改文本字体颜色

尝试嵌套if语句

 function startTime() { var today = new Date(); var h = today.getHours(); var m = today.getMinutes(); var s = today.getSeconds(); m = checkTime(m); s = checkTime(s); document.getElementById('txt').innerHTML = h + ":" + m + ":" + s; var t = setTimeout(startTime, 500); if ((h>=16 && m >=30) && (h<=17 && m<=30)) { document.getElementById("txt").style.color = "red"; } else { document.getElementById("txt").style.color = "black"; } } function checkTime(i) { if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10 return i; } 

尝试使用setInterval()看起来更清晰:

function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();

    if((h==16 && m>=30) || (h==17 && m<=30)){
        document.getElementById("txt").style.color = "red"; 
    }
    else
    {
        document.getElementById("txt").style.color = "black";   
    }
};

setInterval(startTime, 500);

您逻辑中的主要错误是要查找分钟数,该分钟数必须小于等于30且大于等于30。部分评估为true的唯一方法是,如果分钟数是30。

我将时间标准化(这样,小时,分钟和秒的每种组合都可以用唯一的数字表示),然后将其用于比较。

 function startTime(el) { var today = new Date(); var hour = today.getHours(), minute = today.getMinutes(), second = today.getSeconds(); var normalized_time = normalizeTime(hour, minute, second); document.getElementById(el).innerHTML = hour + ":" + padTime(minute) + ":" + padTime(second); document.getElementById(el).style.color = normalized_time >= normalizeTime(16, 30, 0) && normalized_time <= normalizeTime(17, 30, 0) ? 'red' : 'black'; } /* * Add a 0 to the beginning of the number if one-digit number */ function padTime(i) { return i < 10 ? '0' + i : i; } /* * Converts the time to a normalized version */ function normalizeTime(h, m, s) { return s + (60 * m) + (60 * 60 * h); } var t = setInterval(startTime, 500, 'txt'); 
 <span id="txt"></span> 

编辑 :根据您的问题,您要考虑小时和分钟进行比较,所以我没有包括第二部分。

下面的函数获得一个相对于时间的整数值,该值随后用于比较。

function getSeconds(hh,mm,ss)
{
    return (Number(hh) * 60 * 60) + (Number(mm) * 60) + Number(ss);
}

完整的代码:

function getSeconds(hh,mm,ss)
{
    return (Number(hh) * 60 * 60) + (Number(mm) * 60) + Number(ss);
}
function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('txt').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
      var timeNow = getSeconds(h,m,s);
    //if ((h>=16 && m >=30) && (h<=17 && m<=30))
  if (timeNow >= getSeconds(16,30,0) && timeNow <= getSeconds(17,30,00))
    {
        document.getElementById("txt").style.color = "red"; 
    }
    else
    {
document.getElementById("txt").style.color = "black";   
    }
}
function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;

}
startTime();

更新小提琴


先前的回应

试试小提琴

您的代码的问题是,您正在将m与矛盾的条件进行比较。

我将以下的小时和分钟连接起来,并用于时间比较

var hrs = Number(h+'.'+m);

function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('txt').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    var hrs = Number(h+'.'+m);
    //if ((h>=16 && m >=30) && (h<=17 && m<=30))
    if (hrs >= 16.30 && hrs <= 17.30)
    {
        document.getElementById("txt").style.color = "red"; 
    }
    else
    {
        document.getElementById("txt").style.color = "black";   
    }
}
function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;

}
startTime();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM