Wie kann ich zwei Zeitzeichenfolgen im Format HH: MM: SS vergleichen?

82

Ich habe zwei Zeitzeichenfolgen im Format HH: MM: SS . Zum Beispiel str1enthält 10:20:45, str2enthält 5:10:10.

Wie kann ich die oben genannten Werte vergleichen?

Null Zeiger
quelle
1
mögliches Duplikat von Vergleichszeit in Javascript
einsamer
13
Ist es 24h? Dann können Sie einen einfachen Zeichenfolgenvergleich durchführen. Übrigens 5:10:10ist es nicht HH:MM...nur so H:MM:.... Aber für den String-Vergleich müssen beide wirklich das gleiche Format haben.
Felix Kling

Antworten:

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

Der 1. Januar ist ein willkürliches Datum, hat nichts zu bedeuten.

Evgeny Shadchnev
quelle
5
Hinweis : Das Parsen von Zeichenfolgen mit Date.parsewird aufgrund von Browserunterschieden und Inkonsistenzen dringend empfohlen. MDN
Zev Isert
151

Wie Felix Kling in den Kommentaren sagte, vorausgesetzt, Ihre Zeiten basieren auf einer 24-Stunden-Uhr (und sollten es sein, wenn es keine AM / PM gibt) und vorausgesetzt, sie haben immer das Format HH:MM:SS, können Sie einen direkten Zeichenfolgenvergleich durchführen:

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");
Andy E.
quelle
Dies hängt von der Verwendung von ASCII zur Darstellung ab, da die Codes bequem in der
Mit dieser Methode , wenn ich vergleichen String str1 = "00:10"mit str2 = "01:10"und prüfen Sie, dass , wenn der String 1 dann größer sonst String 2 Alarm string eins größer ist alert String 2 größer denken i 12.00 Reibe als 01.00 ist , aber es zeigt String 2 größer
Ali
@ Mubeen1992: Deshalb lautet meine Antwort, dass die Zeiten auf der 24-Stunden-Uhr basieren müssen. Sie müssen für Ihr Szenario eine andere Methode verwenden.
Andy E
2
@ Mubeen1992: 1:10amist als 24-Stunden-Zeitformat unregelmäßig. 01:10wäre korrekter und 01:10würde richtig mit vergleichen12:10 . Wie ich bereits sagte, müssen Sie für Ihre Saiten eine andere Methode verwenden.
Andy E
1
Das ist genial, ich liebe die Einfachheit. Jede andere Methode, die ich gefunden habe, hat mich gezwungen, (implizit oder explizit) ein Datum zusätzlich zur Zeit festzulegen, aber mir ist nur die Zeit wichtig, daher ist dies perfekt.
Jonathan Simon
5

Probieren Sie diesen Code für das 24-Stunden-Format aus.

<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>
Suresh Krishnamoorthi
quelle
5

Date Objekt in js Unterstützung Vergleich, setzen Sie sie das gleiche Datum für den Vergleich hh: mm: ss:

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

Sie können dies einfach mit dem folgenden Code tun:

Hinweis : Das zweite Argument in RegExp ist 'g', das globale Suchflag. Das globale Suchflag führt die RegExp-Suche nach einem Muster in der gesamten Zeichenfolge durch und erstellt ein Array aller Vorkommen, die mit dem angegebenen Muster übereinstimmen. Der folgende Code funktioniert nur, wenn die Uhrzeit im Format HH: MM: SS ist, dh im 24-Stunden-Zeitformat .

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');
}
Kishan Patel
quelle
2

Versuchen Sie diesen Code.

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");
}
niksvp
quelle
1

Sie können die beiden Werte direkt nach dem Teilen mit ':' vergleichen.

Patapizza
quelle
Warum sollten Sie sie teilen müssen?
HoldOffHunger
Dafür gibt es intelligentere Möglichkeiten. zB: mit Date oder moment.js
Koray Küpe
1

Ich habe diese Funktion von der @ kamil-p-Lösung verbessert. Ich habe Sekundenvergleich ignoriert. Sie können dieser Funktion eine Sekundenlogik hinzufügen, indem Sie auf Ihre Verwendung achten.

Arbeiten Sie nur für das Zeitformat "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;
    }
}

Beispiel

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

Danke an @ kamil-p

Ghasem Aladaghlou
quelle
Sehr geehrtes Team, ich möchte Datum und Zeitstempel für die Sitzung vergleichen, die innerhalb von 30 Minuten abläuft. Wie berechnen wir in Typoskript oder Javascript, um das aktuelle Datum und die Zeitstempel-Mints im Vergleich zum Sitzungs-Datums-Zeitstempel-Min zu überprüfen
karthik elavan
1

Der beste Weg, um Zeiten mit der Konvertierung in ms zu vergleichen

var minutesOfDay = function(m){
      return m.minutes() + m.hours() * 60;
    }

return minutesOfDay(now) > minutesOfDay(end);
Erhabene Laravel Dev
quelle
Beachten Sie, dass diese Frage bereits akzeptiert wurde. Bitte bearbeiten Sie Ihre Antwort, um sicherzustellen, dass sie andere Antworten verbessert, die bereits in dieser Frage enthalten sind.
28.
1

Konvertieren Sie diese Zeichenfolgen in Sekunden:

var str1 = '10:20:45';
var str2 = '5:10:10';

str1 =  str1.split(':');
str2 =  str2.split(':');

totalSeconds1 = parseInt(str1[0] * 3600 + str1[1] * 60 + str1[0]);
totalSeconds2 = parseInt(str2[0] * 3600 + str2[1] * 60 + str2[0]);

// compare them

if (totalSeconds1 > totalSeconds2 ) { // etc...
Pmiranda
quelle
0

Ich bin mit regulären Ausdrücken nicht so vertraut, und mein Beispiel ergibt sich aus einem datetimepicker-Feld, das mit m / d / Y h: mA formatiert ist. In diesem Rechtsbeispiel müssen Sie vor der eigentlichen Hinterlegungsverhandlung eintreffen. Ich verwende die Ersetzungsfunktion, um die Daten zu bereinigen, damit ich sie als Datumsobjekte verarbeiten und vergleichen kann.

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;
}
Nicolas Giszpenc
quelle
0

Ich denke, Sie können es so ausdrücken.

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>

Game Boy
quelle
0

Setzen Sie den extrahierten Teil der Zeit auf Variablen.

// If you don't have the second part then set it to 00.

 //Create date object and set the time to that
 var startTimeObject = new Date();
 startTimeObject.setHours(startHour, startMinute, startSecond);

 //Create date object and set the time to that
 var endTimeObject = new Date(startTimeObject);
 endTimeObject.setHours(endHour, endMinute, endSecond);

 //Now we are ready to compare both the dates
 if(startTimeObject > endTimeObject) {
     alert('End time should be after start time.');
 }
 else {
     alert('Entries are perfect.');
 }
Irshad Khan
quelle
-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;
        }
    }
}
Kamil P.
quelle
Ihre Funktion wird 1für zurückkehren 0:0:5, 0:1:0koppeln, und das ist falsch.
Styx
1
Willkommen bei SO! Es wäre hilfreich, eine kleine Erklärung des Codes und nicht nur des Snippets zu haben.
Sniperd
-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...
                }
Richardson V Johnson
quelle
Funktioniert nicht. Das Format ist "12:34:56". Dies behandelt die Stunden als Minuten, die Minuten als Sekunden und ignoriert die Sekunden: var stMin = (parseInt (sts [0]) * 60 + parseInt (sts [1]));
HoldOffHunger