2011-06-02 13 views
48

Tengo dos cadenas de tiempo en HH: MM: SS formato. Por ejemplo, str1 contiene 10:20:45, str2 contiene 5:10:10.¿Cómo puedo comparar dos cadenas de tiempo en el formato HH: MM: SS?

¿Cómo puedo comparar los valores anteriores?

+1

posible duplicado de [Comparar el tiempo en javascript] (http://stackoverflow.com/questions/3316281/compare-time-in-javascript) – lonesomeday

+10

personal ¿Se 24H? Entonces puedes hacer una comparación simple de cadenas. Por cierto, '5: 10: 10' no es' HH: MM ... 'solo es' H: MM: ... '. Pero para la comparación de cadenas, ambas tienen que estar en el mismo formato. –

Respuesta

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

El 1 de enero es una fecha arbitraria, no significa nada.

+1

** Nota **: El análisis de cadenas con 'Date.parse' no se recomienda debido a las diferencias e incoherencias del navegador. [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date#Methods) –

2

Pruebe este código.

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

Puede comparar los dos valores inmediatamente después de dividirlos con ':'.

+0

¿Por qué tendrías que dividirlos? – HoldOffHunger

93

Como dijo Felix Kling en los comentarios, siempre que sus tiempos están basados ​​en un reloj de 24 horas (y que deberían ser si no hay AM/PM) y siempre que estén siempre en el formato HH:MM:SS se puede hacer una directa comparación de cuerdas:

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 ......... :) –

+0

Esto depende del uso de ASCII para la representación ya que los códigos están convenientemente en orden –

+0

con este método si comparo la cadena 'str1 =" 00:10 "' con 'str2 = "01:10" 'y comprueba que si la cadena 1 es mayor que la cadena 2 cadena de alerta cadena una es mayor, más alerta cadena 2 es mayor, creo que 12PM es más de 1AM pero muestra que la cadena 2 es mayor – Ali

3

Pruebe este código para el formato de 24 horas.

<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

No funciona. El formato es "12:34:56". Esto está tratando las horas como minutos, los minutos como segundos, e ignora los segundos: var stMin = (parseInt (sts [0]) * 60 + parseInt (sts [1])); – HoldOffHunger

0

no estoy tan cómodo con las expresiones regulares, y mis resultados de ejemplo de un campo formateado datetimepicker m/d/Y h: mA. En este ejemplo legal, debe llegar antes de la audiencia de deposición en sí. Utilizo la función de reemplazo para limpiar las fechas para poder procesarlas como objetos de fecha y compararlas.

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; 
} 
-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

Su función devolverá '1' para' 0: 0: 5', '0: 1: 0' par, y eso está mal. – Styx

+0

bienvenido a SO! Sería útil tener una pequeña explicación del código y no solo del fragmento. – sniperd

+0

¡Bien !, ahora es correcto. –

0

Date objeto en comparación apoyo js, ​​las puso misma fecha para hh comparar: mm: ss:

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

Usted fácilmente puede hacerlo con más adelante código:

Nota: El segundo argumento en RegExp es 'g', que es el indicador de búsqueda global. El indicador de búsqueda global hace que la búsqueda RegExp busque un patrón a lo largo de la cadena, creando una matriz de todas las ocurrencias que puede encontrar que coincidan con el patrón dado.

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

He mejorado esta función desde la solución @ kamil-p. Ignore los segundos. Puede agregar la lógica de segundos a esta función mediante la atención que usa.

Funciona solo para el formato de hora "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; 
    } 
} 

ejemplo

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

Gracias a @ Kamil-p

0

creo que se puede poner como este.

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>

Cuestiones relacionadas