【问题标题】:comparing current time with input time in javascript比较当前时间和javascript中的输入时间
【发布时间】:2025-12-17 07:25:01
【问题描述】:

我希望通过下面的 html 和 javascript 代码将输入时间与当前时间进行比较!如果输入时间少于 2 小时,我想在标签中打印“更少的时间”,如果超过 2 小时,我想在标签中打印“足够的时间”!

 
    function test(){
    	var element = document.getElementById("time").value;
    	var d = new Date();
        var n = d.getTime();
    	if(element-n>2){
    		 document.getElementById("check").innerHTML="sufficient time";
    	}
    	else{
    		document.getElementById("check").innerHTML="Less time";
    	
    	}
    }
 
    <html>
    
    <body>
    	<form>
    		<span>Time</span>
    	<input type="time" id="time">
    		
    		  <input type="button" value="CHECK"   onclick="test();"> <br>
    		<label id="check"></label>
              <input class="button" type=reset name=reset value=Cancel>
    	</form>
    </body>
    </html>

当我评估这个时,我总是得到更少的时间!如何更正我的代码?

【问题讨论】:

  • 输入值为hh:mm:ss.ms格式的字符串,不能直接进行算术运算。你必须先解析它。
  • 我不知道如何处理它:(
  • This SO thread 会帮助你。您必须使用 moment.js,不要为单独的解决方案而烦恼,它会变得非常棘手。

标签: javascript html function time compare


【解决方案1】:

代码的工作示例

function test() {

  var element = document.getElementById("time").value;
  
  if (element == "") {
  alert("Please Enter Time");
    return false;  
  }
  else {
  
  // get system local time
  var d = new Date();
  var m = d.getMinutes();
  var h = d.getHours();
  if(h == '0') {h = 24}
  
  var currentTime = h+"."+m;
  console.log(currentTime);
 
  // get input time
  var time = element.split(":");
  var hour = time[0];
  if(hour == '00') {hour = 24}
  var min = time[1];
  
  var inputTime = hour+"."+min;
  console.log(inputTime);
  
  var totalTime = currentTime - inputTime;
  console.log(totalTime);
  
  if ((Math.abs(totalTime)) > 2) {
    document.getElementById("check").innerHTML = "sufficient time";
  } 
  else {
    document.getElementById("check").innerHTML = "Less time";

  }
    }
}
<html>

<body>
  <form>
    <span>Time</span>
    <input type="time" id="time" required>

    <input type="button" value="CHECK" onclick="return test();">
    <br>
    <label id="check"></label>
    <input class="button" type=reset name=reset value=Cancel>
  </form>
</body>

</html>

【讨论】:

  • 非常感谢!这个“if(hour == '00') {hour = 24}”是做什么的?
  • @SachiniKarunaratne 只是为了消除小时之间的任何冲突。例如,如果是 12:00 AM,您将得到 00 作为一个小时。
【解决方案2】:

您没有考虑到字段中的输入值必须解析为日期值才能在计算中使用:

function test(){
    var timeNow = new Date();
    var tm = document.getElementById("time");
    var timeParts = tm.split(":");
    var inputTime = new Date(timeNow.getYear() , timeNow.getMonth() ,     timeNow.getDate() , parseInt(timeParts[0]), parseInt(timeParts[1]), 0, 0);

    var diff = Math.abs(timeNow.getTime() - inputTime.getTime());

    if( diff > 2*60*60*1000 ) 
        document.getElementById("check").innerHTML="sufficient  time";
    else
        document.getElementById("check").innerHTML="Less time";
     }

我假设您在当前时间之前或之后检查两个小时。如果没有,请随意删除 Math.abs 并相应地使用。

【讨论】:

    【解决方案3】:

    这本质上是类型不匹配。您正在将时间戳与时间字符串进行比较。 getTime() 返回一个时间戳,它指定特定日期的时间,而时间字符串只是一个字符串,例如 02:02,它没有指定日期。

    您需要从输入中收集日期和时间,然后从输入中构造一个Date 对象,然后比较两个getTime() 结果。这样您将比较两个时间戳。

    由于午夜前后发生的事情,输入包含日期很重要。如果当前时间是 23:30,输入时间是 01:15,你的代码怎么知道用户的意思是不是明天早上 1:15?

    【讨论】:

      【解决方案4】:

      getTime() 返回毫秒,因此要获得两个小时,只需乘以 1000 * 60 * 60 即可获得以毫秒为单位的一小时。

      元素将包含一个字符串,例如“12:30”,并且必须进行转换,这可能会进一步帮助您:

      Convert string to time JavaScript (h:m)

      希望对你有帮助。

      【讨论】: