Mam dwa ciągi czasu w formacie HH: MM: SS . Na przykład str1
zawiera 10:20:45
, str2
zawiera 5:10:10
.
Jak mogę porównać powyższe wartości?
javascript
Wskaźnik zerowy
źródło
źródło
5:10:10
to nieHH:MM...
tylkoH:MM:...
. Ale dla porównania ciągów oba muszą być w tym samym formacie.Odpowiedzi:
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10') > true
1 stycznia to dowolna data, nic nie znaczy.
źródło
Date.parse
jest zdecydowanie odradzane ze względu na różnice i niespójności przeglądarek. MDNJak powiedział Felix Kling w komentarzach, pod warunkiem, że twoje godziny są oparte na zegarze 24-godzinnym (i powinny być, jeśli nie ma AM / PM) i pod warunkiem, że są zawsze w formacie
HH:MM:SS
, możesz wykonać bezpośrednie porównanie ciągów: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");
źródło
str1 = "00:10"
zstr2 = "01:10"
i sprawdzę, czy jeśli ciąg 1 jest większy, to ciąg 2 ciąg znaków ostrzegawczych jeden jest większy w przeciwnym razie ostrzeżenie ciąg 2 jest większy Myślę, że godzina dwunasta jest większa niż 1 w nocy, ale pokazuje, że ciąg 2 jest większy1:10am
jest nieregularny jako format 24-godzinny.01:10
byłoby bardziej poprawne i można01:10
by go odpowiednio porównać z12:10
. Tak jak powiedziałem, dla twoich strun musisz użyć innej metody.Date
obiekt w porównaniu z obsługą js, ustaw dla nich tę samą datę do porównania gg: mm: ss:new Date ('1/1/1999 ' + '10:20:45') > new Date ('1/1/1999 ' + '5:10:10') > true
źródło
Wypróbuj ten kod dla formatu 24-godzinnego.
<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>
źródło
Możesz to łatwo zrobić za pomocą poniższego kodu:
Uwaga : Drugi argument w RegExp to „g”, który jest flagą wyszukiwania globalnego. Globalna flaga wyszukiwania sprawia, że RegExp wyszukuje wzorzec w ciągu, tworząc tablicę wszystkich wystąpień, które może znaleźć, pasujących do danego wzorca. Poniższy kod działa tylko wtedy, gdy czas jest w formacie HH: MM: SS, czyli w formacie 24-godzinnym .
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'); }
źródło
Wypróbuj ten kod.
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"); }
źródło
Zamień na sekundy te ciągi:
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...
źródło
Poprawiłem tę funkcję z rozwiązania @ kamil-p. Zignorowałem porównanie sekund. Możesz dodać logikę sekund do tej funkcji, zwracając uwagę na użycie.
Działa tylko dla formatu czasu „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; } }
przykład
alert(compareTime('8:30','11:20'));
Dzięki @ kamil-p
źródło
var minutesOfDay = function(m){ return m.minutes() + m.hours() * 60; } return minutesOfDay(now) > minutesOfDay(end);
źródło
Możesz porównać te dwie wartości zaraz po podzieleniu ich znakiem „:”.
źródło
Nie czuję się dobrze z wyrażeniami regularnymi, a mój przykład wynika z pola datetimepicker w formacie m / d / Y h: mA. W tym przykładzie prawnym musisz stawić się przed faktycznym przesłuchaniem. Używam funkcji replace w celu wyczyszczenia dat, aby móc je przetwarzać jako obiekty Date i porównywać.
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; }
źródło
Myślę, że możesz to ująć w ten sposób.
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>
źródło
Ustaw wyodrębnioną część czasu na zmienne.
// 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.'); }
źródło
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; } } }
źródło
1
do0:0:5
,0:1:0
pary, a to źle.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... }
źródło