I have two time strings in hh:mm:ss
format. (eg: 12:40:13
and 20:01:01
.) How can I compare these in JavaScript?

- 24,552
- 19
- 101
- 135

- 9,089
- 26
- 73
- 118
-
1Does this answer your question? [How can I compare two time strings in the format HH:MM:SS?](https://stackoverflow.com/questions/6212305/how-can-i-compare-two-time-strings-in-the-format-hhmmss) – Rubén Oct 07 '20 at 04:20
8 Answers
I prefer to have date objects, but as pointed out elsewhere, you can just convert to seconds if you want to do simple compares
function dateCompare(time1,time2) {
var t1 = new Date();
var parts = time1.split(":");
t1.setHours(parts[0],parts[1],parts[2],0);
var t2 = new Date();
parts = time2.split(":");
t2.setHours(parts[0],parts[1],parts[2],0);
// returns 1 if greater, -1 if less and 0 if the same
if (t1.getTime()>t2.getTime()) return 1;
if (t1.getTime()<t2.getTime()) return -1;
return 0;
}
alert(dateCompare("12:40:13","20:01:01"));
For seconds:
function dateDiff(time1,time2) {
var t1 = new Date();
var parts = time1.split(":");
t1.setHours(parts[0],parts[1],parts[2],0);
var t2 = new Date();
parts = time2.split(":");
t2.setHours(parts[0],parts[1],parts[2],0);
return parseInt(Math.abs(t1.getTime()-t2.getTime())/1000);
}
Assuming you have 24 hour times and same padding you can do simple string compare
var t1 = "12:40:13", t2= "20:01:01";
if (t1<t2) {
console.log(t1," is < ", t2);
}

- 169,008
- 28
- 173
- 236
If "compare" means "see if they are equal", and the two have the same format, why not simply:
var time1 = "12:40:13";
var time2 = "20:01:01";
if (time1 == time2) {
// do stuff
}
If you need to get the difference in time, the conversion to a date object is one way (see mplungjan's answer) or you can convert them to a common unit (say seconds) and subtract:
function toSeconds(t) {
var bits = t.split(':');
return bits[0]*3600 + bits[1]*60 + bits[2]*1;
}
var secs1 = toSeconds(time1);
var secs2 = toSeconds(time2);
// do stuff - compare, subtract, less than, greater than, whatever

- 142,382
- 31
- 172
- 209
-
Yeah, I always make date objects - but obviously it is not always necessary – mplungjan Jul 09 '11 at 05:33
-
-
-
@Whitecat—you can write some tests to find out, make sure you test across a good variety of hosts as relative performance likely differs. However, I doubt that the difference in performance is significant and is unlikely to be the determining factor in which method to use unless you have many such operations to perform. – RobG Jul 14 '16 at 00:27
-
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10')
The 1st January is an arbitrary date, doesn't mean anything.

- 740
- 2
- 10
- 18
Here is one suggestion that I modified from the solution in this website here, hope it helps.
function compareTime(time_1, time_2) {
var s1 =
time1.split(":")[0] * 3600 + time1.split(":")[1] * 60 + time1.split(":")[2];
var s2 =
time2.split(":")[0] * 3600 + time2.split(":")[1] * 60 + time1.split(":")[2];
return Math.abs(s1 - s2); // Gets difference in seconds
}
var time_1 = "12:40:13", time_2 = "20:01:01";
document.write(compareTime(time_1, time_2));

- 4,853
- 10
- 39
- 48
Here's another take:
function compareTimes(timeOne, timeTwo) {
if(daterize(timeOne) > daterize(timeTwo)) return 1;
if(daterize(timeOne) < daterize(timeTwo)) return -1;
return 0;
}
function daterize(time) {
return Date.parse("Thu, 01 Jan 1970 " + time + " GMT");
}
You may also want to take a look at the MDN Javascript docs for Dates. Javascript comes with a lot of gotchas, like Date.month going from 0-11.

- 638
- 2
- 9
- 20
var time1 = "09:30";
var time2 = "15:30";
var time1InMinutesForTime1 = getTimeAsNumberOfMinutes(time1);
var time1InMinutesForTime2 = getTimeAsNumberOfMinutes(time2);
var time1IsBeforeTime2 = time1InMinutesForTime1 < time1InMinutesForTime2;
function getTimeAsNumberOfMinutes(time) {
var timeParts = time.split(":");
var timeInMinutes = (timeParts[0] * 60) + timeParts[1];
return Number(timeInMinutes);
}

- 19
- 4
if you have 2 time string in 24 hour format:
const string1 = new Date().toLocaleTimeString({ hour12: false });
const string2 = new Date().toLocaleTimeString({ hour12: false });
you can simply compare these two strings:
string1 < string2 ? 'string1 < string2' : 'string1 > string2';

- 11
- 1
Assuming the times are in the same time zone, simply compare the strings.
This evaluates to true
:
"12:40:13" < "20:01:01"
Note that the items being compared must use the same hh:mm:ss format (for example, "05:00:00" < "4:00:00"
evaluates to true
, which is not what you want).

- 2,985
- 2
- 33
- 36