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?
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?
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.
** 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) –
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");
}
Puede comparar los dos valores inmediatamente después de dividirlos con ':'.
¿Por qué tendrías que dividirlos? – HoldOffHunger
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");
+1 ......... :) –
Esto depende del uso de ASCII para la representación ya que los códigos están convenientemente en orden –
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
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>
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...
}
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
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;
}
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;
}
}
}
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
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');
}
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
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>
posible duplicado de [Comparar el tiempo en javascript] (http://stackoverflow.com/questions/3316281/compare-time-in-javascript) – lonesomeday
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. –