Как сравнить две временные строки в формате ЧЧ: ММ: СС? - PullRequest
66 голосов
/ 02 июня 2011

У меня есть две строки времени в формате ЧЧ: ММ: СС . Например, str1 содержит 10:20:45, str2 содержит 5:10:10.

Как я могу сравнить вышеуказанные значения?

Ответы [ 12 ]

124 голосов
/ 02 июня 2011

Как сказал Феликс Клинг в комментариях, при условии, что ваше время основано на 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");
96 голосов
/ 02 июня 2011
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10')
> true

1 января - произвольная дата, ничего не значит.

4 голосов
/ 20 июня 2012

Попробуйте этот код для 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>
2 голосов
/ 11 января 2018

Вы можете легко сделать это с кодом ниже:

Примечание : Второй аргумент в 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');
}
2 голосов
/ 21 декабря 2017

Date объект в js поддерживает сравнение, задайте им одинаковую дату для сравнения чч: мм: сс:

new Date ('1/1/1999 ' + '10:20:45') > new Date ('1/1/1999 ' + '5:10:10') 
> true
2 голосов
/ 02 июня 2011

Попробуйте этот код.

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");
}
1 голос
/ 27 января 2018

Я улучшил эту функцию из решения @ 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

1 голос
/ 02 июня 2011

Вы можете сравнить два значения сразу после разделения на ':'.

0 голосов
/ 04 марта 2018

Я думаю, вы можете сказать это так.

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>
0 голосов
/ 27 сентября 2017
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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...