2011-06-02 59 views
48

我有两个时间字符串HH:MM:SS格式。例如,str1包含10:20:45str2包含5:10:10如何比较格式为HH:MM:SS的两个时间字符串?

如何比较上述值?

+1

的可能重复[对比在javascript时间(http://stackoverflow.com/questions/3316281/compare-time-in-javascript) – lonesomeday 2011-06-02 08:47:40

+10

难道24H?然后你可以做简单的字符串比较。顺便说一句,'5:10:10'不是'HH:MM ...',它只是'H:MM:...'。但是对于字符串比较,两者都必须采用相同的格式。 – 2011-06-02 08:47:52

回答

76
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10') 
> true 

1月1日是任意日期,并不代表什么意思。

+1

**注意**:由于浏览器的差异和不一致,强烈建议不要使用'Date.parse'解析字符串。 [MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date#Methods) – 2017-01-31 00:22:11

2

试试看看这个代码。

var startTime = "05:01:20"; 
var endTime = "09:00:00"; 
var regExp = /(\d{1,2})\:(\d{1,2})\:(\d{1,2})/; 
if(parseInt(endTime .replace(regExp, "$1$2$3")) > parseInt(startTime .replace(regExp, "$1$2$3"))){ 
alert("End time is greater"); 
} 
2

您可以在将它们与':'分开之后立即比较这两个值。

+0

你为什么需要拆分它们? – HoldOffHunger 2017-09-14 19:12:39

93

由于费利克斯·克林在评论中说,只要你的时间以24小时制(他们应该是如果没有AM/PM),并提供他们总是在HH:MM:SS你可以做一个直接的格式字符串比较:

var str1 = "10:20:45", 
    str2 = "05:10:10"; 

if (str1 > str2) 
    alert("Time 1 is later than time 2"); 
else 
    alert("Time 2 is later than time 1"); 
+18

+1 ......... :) – 2011-06-02 09:06:49

+0

这是依赖于使用ASCII代表,因为代码很方便 – 2013-03-25 20:12:42

+0

这个方法,如果我比较字符串'str1 =“00:10”'与'str2 =“01:10”'并检查如果字符串1大于那么字符串2警告字符串字符串一个大于其他字符警告字符串2更大我认为12PM比1AM更粗,但它显示字符串2更大 – Ali 2013-08-02 19:43:19

3

试试此代码的24小时格式的时间。

<script type="text/javascript"> 
var a="12:23:35"; 
var b="15:32:12"; 
var aa1=a.split(":"); 
var aa2=b.split(":"); 

var d1=new Date(parseInt("2001",10),(parseInt("01",10))-1,parseInt("01",10),parseInt(aa1[0],10),parseInt(aa1[1],10),parseInt(aa1[2],10)); 
var d2=new Date(parseInt("2001",10),(parseInt("01",10))-1,parseInt("01",10),parseInt(aa2[0],10),parseInt(aa2[1],10),parseInt(aa2[2],10)); 
var dd1=d1.valueOf(); 
var dd2=d2.valueOf(); 

if(dd1<dd2) 
{alert("b is greater");} 
else alert("a is greater"); 
} 
</script> 
-3
var startTime = getTime(document.getElementById('startTime').value); 
       var endTime = getTime(document.getElementById('endTime').value); 


       var sts = startTime.split(":"); 
       var ets = endTime.split(":"); 

       var stMin = (parseInt(sts[0]) * 60 + parseInt(sts[1])); 
       var etMin = (parseInt(ets[0]) * 60 + parseInt(ets[1])); 
       if(etMin > stMin) { 
       // do your stuff... 
       } 
+0

不起作用。格式是“12:34:56”。这是将小时数视为分钟,将分钟视为秒数,而忽略秒数:var stMin =(parseInt(sts [0])* 60 + parseInt(sts [1])); – HoldOffHunger 2017-09-14 19:14:31

0

我不使用正则表达式那么舒服,并且从一个DateTimePicker场我的示例结果格式M/d/Y H:毫安。在这个合法的例子中,你必须在实际的证词听证会之前到达。我使用replace函数来清理日期,以便我可以将它们作为Date对象处理并进行比较。

function compareDateTimes() { 
    //date format ex "04/20/2017 01:30PM" 
    //the problem is that this format results in Invalid Date 
    //var d0 = new Date("04/20/2017 01:30PM"); => Invalid Date 

    var start_date = $(".letter #depo_arrival_time").val(); 
    var end_date = $(".letter #depo_dateandtime").val(); 

    if (start_date=="" || end_date=="") { 
     return; 
    } 
    //break it up for processing 
    var d1 = stringToDate(start_date); 
    var d2 = stringToDate(end_date); 

    var diff = d2.getTime() - d1.getTime(); 
    if (diff < 0) { 
     end_date = moment(d2).format("MM/DD/YYYY hh:mA"); 
     $(".letter #depo_arrival_time").val(end_date); 
    } 
} 

function stringToDate(the_date) { 
    var arrDate = the_date.split(" "); 
    var the_date = arrDate[0]; 
    var the_time = arrDate[1]; 
    var arrTime = the_time.split(":"); 
    var blnPM = (arrTime[1].indexOf("PM") > -1); 
    //first fix the hour 
    if (blnPM) { 
     if (arrTime[0].indexOf("0")==0) { 
      var clean_hour = arrTime[0].substr(1,1); 
      arrTime[0] = Number(clean_hour) + 12; 
     } 
     arrTime[1] = arrTime[1].replace("PM", ":00"); 
    } else { 
     arrTime[1] = arrTime[1].replace("AM", ":00"); 
    } 
    var date_object = new Date(the_date); 
    //now replace the time 
    date_object = String(date_object).replace("00:00:00", arrTime.join(":")); 
    date_object = new Date(date_object); 

    return date_object; 
} 
在JS支持比较
-1
var str1 = "150:05:05", 
var str2 = "80:04:59"; 

function compareTime(str1, str2){ 

    if(str1 === str2){ 
     return 0; 
    } 

    var time1 = str1.split(':'); 
    var time2 = str2.split(':'); 

    for (var i = 0; i < time1.length; i++) { 
     if(time1[i] > time2[i]){ 
      return 1; 
     } else if(time1[i] < time2[i]) { 
      return -1; 
     } 
    } 
} 
+0

您的函数将返回'1'为'0:0:5','0:1:0'对,这是错误的。 – Styx 2017-09-27 19:16:46

+0

欢迎来到SO!对代码进行一些解释而不仅仅是一小段代码会很有帮助。 – sniperd 2017-09-27 19:36:06

+0

对!现在是正确的。 – 2017-09-27 19:42:37

0

Date对象,将它们设置为比较HH同一日期:MM:SS:

new Date ('1/1/1999 ' + '10:20:45') > new Date ('1/1/1999 ' + '5:10:10') 
> true 
1

您可以轻松地做到这一点下面的代码:

Note:RegExp中的第二个参数是全局搜索标志'g'。 全局搜索标志使得RegExp在整个字符串中搜索一个模式,创建一个匹配给定模式的所有匹配项的数组。

var regex = new RegExp(':', 'g'), 
    timeStr1 = '5:50:55', 
    timeStr2 = '6:17:05'; 
if(parseInt(timeStr1.replace(regex, ''), 10) < parseInt(timeStr2.replace(regex, ''), 10)){ 
    console.log('timeStr1 is smaller then timeStr2'); 
} else { 
    console.log('timeStr2 is smaller then timeStr1'); 
} 
0

我从@ kamil-p解决方案改进了此功能。 我忽略了秒比较。您可以通过注意您的使用来为此功能添加秒钟逻辑。

仅适用于“HH:mm”时间格式。

function compareTime(str1, str2){ 
    if(str1 === str2){ 
     return 0; 
    } 
    var time1 = str1.split(':'); 
    var time2 = str2.split(':'); 
    if(eval(time1[0]) > eval(time2[0])){ 
     return 1; 
    } else if(eval(time1[0]) == eval(time2[0]) && eval(time1[1]) > eval(time2[1])) { 
     return 1; 
    } else { 
     return -1; 
    } 
} 

例如

alert(compareTime('8:30','11:20')); 

感谢@卡米尔-P

0

我想你可以把它像这样。

var a = "10:20:45"; 
 
var b = "5:10:10"; 
 

 
var timeA = new Date(); 
 
timeA.setHours(a.split(":")[0],a.split(":")[1],a.split(":")[2]); 
 
timeB = new Date(); 
 
timeB.setHours(b.split(":")[0],b.split(":")[1],b.split(":")[2]); 
 

 
var x= "B is later than A"; 
 
if(timeA>timeB) x = "A is later than B"; 
 
document.getElementById("demo").innerHTML = x;
<p id="demo"></p>