HH:MM:SS形式の2つの時間文字列を比較するにはどうすればよいですか?


83

HH:MM:SS形式の2つの時間文字列があります。たとえば、str1contains 10:20:45str2contains 5:10:10

上記の値を比較するにはどうすればよいですか?



14
24時間ですか?次に、簡単な文字列比較を行うことができます。ところで、それだけでは5:10:10ありません。ただし、文字列を比較するには、両方が実際には同じ形式である必要があります。HH:MM...H:MM:...
Felix Kling 2011年

回答:


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

1月1日は任意の日付であり、何の意味もありません。


5
Date.parseブラウザの違いや不整合のため、文字列をで解析することは強くお勧めしません。MDN
Zev Isert 2017年

156

以下のようフェリックスクリングがコメントで言った、あなたの時間は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");

コードは便利な順序であるため、これは表現にASCIIを使用することに依存しています

この方法で、文字列str1 = "00:10"str2 = "01:10"と比較し、文字列1が大きい場合は文字列2よりも大きいことを確認しますアラート文字列文字列1が大きい場合はアラート文字列2が大きい場合12PMは午前1時よりも大きいと思いますが、文字列2が大きいことを示しています
Ali

1
@ Mubeen1992:それが私の答えが、時間は24時間制に基づいている必要があると言っている理由です。シナリオには別の方法を使用する必要があります。
Andy E

2
@ Mubeen1992:1:10am24時間形式としては不規則です。 01:10より正確で、01:10と適切に比較され12:10ます。私が言ったように、あなたの文字列には、別の方法を使用する必要があります。
アンディE

1
これは素晴らしいです、私はシンプルさが大好きです。私が見つけた他のすべての方法では、時間の上に(暗黙的または明示的に)日付を課す必要がありましたが、私は時間だけを気にしているので、これは完璧です。
ジョナサンサイモン

7

Date jsサポート比較のオブジェクト、比較のために同じ日付を設定しますhh:mm:ss:

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

5

このコードを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>

4

以下のコードで簡単に行うことができます。

:RegExpの2番目の引数は、グローバル検索フラグである「g」です。グローバル検索フラグにより​​、RegExpは文字列全体のパターンを検索し、指定されたパターンに一致するすべてのオカレンスの配列を作成します。以下のコードは、時刻がHH:MM:SS形式、つまり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

このコードを試してください。

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

2

これらの文字列を秒に変換します。

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...

1

@ kamil-pソリューションからこの関数を改善しました。秒比較を無視しました。使用に注意することで、この関数に秒ロジックを追加できます。

「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;
    }
}

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

@ kamil-pに感謝します


1

msへの変換を使用して時間を比較する最良の方法

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

return minutesOfDay(now) > minutesOfDay(end);

この質問に対する回答はすでに受け入れられていることに注意してください。回答を編集して、この質問にすでに存在する他の回答よりも改善されるようにしてください。
hongsy

0

':'で分割した直後に、2つの値を比較できます。


なぜそれらを分割する必要があるのでしょうか?
holdOffHunger 2017

それを行うためのよりスマートな方法があります。例:使用して日付やmoment.js
Korayクペ

0

私は正規表現にあまり慣れていません。私の例は、m / d / Y h:mA形式のdatetimepickerフィールドの結果です。この法的な例では、実際の証言録取の聴聞会の前に到着する必要があります。replace関数を使用して日付をクリーンアップし、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;
}

0

こういう風に言えると思います。

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

時間の抽出された部分を変数に設定します。

// 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.');
 }

-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;
        }
    }
}

あなたの関数は、ペア1に対して戻ります、そしてそれは間違っています。0:0:50:1:0
Styx 2017

1
SOへようこそ!スニペットだけでなく、コードについて少し説明しておくと役に立ちます。
sniperd 2017

-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...
                }

動作しません。形式は「12:34:56」です。これは、時間を分として扱い、分を秒として扱い、秒を無視します。varstMin =(parseInt(sts [0])* 60 + parseInt(sts [1]));
holdOffHunger 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.