У меня есть две строки времени в формате ЧЧ: ММ: СС . Например, str1
содержит 10:20:45
, str2
содержит 5:10:10
.
Как я могу сравнить вышеуказанные значения?
javascript
Нулевой указатель
источник
источник
5:10:10
не такHH:MM...
лиH:MM:...
? Но для сравнения строк оба действительно должны быть в одном формате.Ответы:
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10') > true
1 января - дата произвольная, ничего не значит.
источник
Date.parse
настоятельно не рекомендуется из-за различий и несоответствий браузеров. MDNКак сказал Феликс Клинг в комментариях, при условии, что ваше время основано на 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");
источник
str1 = "00:10"
сstr2 = "01:10"
и проверяю, что если строка 1 больше, то строка 2, строка предупреждения, строка 1 больше, иначе строка предупреждения 2 больше, я думаю, что 12 вечера больше, чем 1:00, но он показывает, что строка 2 больше1:10am
неправильный 24-часовой формат времени.01:10
было бы правильнее и01:10
сравнил бы как следует12:10
. Как я уже сказал, для ваших строк вам нужно использовать другой метод.Date
объект в сравнении поддержки js, установите для них ту же дату для сравнения чч: мм: сс:new Date ('1/1/1999 ' + '10:20:45') > new Date ('1/1/1999 ' + '5:10:10') > true
источник
Попробуйте этот код для 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>
источник
Вы можете легко сделать это с помощью кода ниже:
Примечание . Второй аргумент в RegExp - это «g», который является флагом глобального поиска. Флаг глобального поиска заставляет RegExp искать шаблон по всей строке, создавая массив всех вхождений, которые он может найти, соответствующих данному шаблону. Приведенный ниже код работает только в том случае, если время указано в формате ЧЧ: ММ: СС, т.е. в 24-часовом формате .
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'); }
источник
Попробуйте этот код.
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"); }
источник
Преобразуйте эти строки в секунды:
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...
источник
Я улучшил эту функцию из решения @ kamil-p. Я проигнорировал сравнение секунд. Вы можете добавить секундную логику к этой функции, уделив особое внимание использованию.
Работает только с форматом времени «ЧЧ: мм».
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'));
Спасибо @ kamil-p
источник
var minutesOfDay = function(m){ return m.minutes() + m.hours() * 60; } return minutesOfDay(now) > minutesOfDay(end);
источник
Вы можете сравнить два значения сразу после их разделения с помощью ':'.
источник
Мне не очень нравятся регулярные выражения, и мой пример является результатом поля datetimepicker в формате m / d / Y h: mA. В этом юридическом примере вы должны явиться до фактического слушания дела о снятии показаний. Я использую функцию замены для очистки дат, чтобы я мог обрабатывать их как объекты 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; }
источник
Думаю, можно так выразиться.
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>
источник
Установите извлеченную часть времени для переменных.
// 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.'); }
источник
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; } } }
источник
1
для0:0:5
,0:1:0
паров, и это неправильно.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... }
источник