2011-06-02 60 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>