मैं एचएच: एमएम: एसएस प्रारूप में दो समय के तार की तुलना कैसे कर सकता हूं?


87

मेरे पास एचएच: एमएम: एसएस प्रारूप में दो बार तार हैं । उदाहरण के लिए, str1समाहित 10:20:45, str2समाहित है 5:10:10।

मैं उपरोक्त मूल्यों की तुलना कैसे कर सकता हूं?



14
क्या यह 24 ह? फिर आप सरल स्ट्रिंग तुलना कर सकते हैं। Btw, 5:10:10नहीं है HH:MM...यह केवल है H:MM:...। लेकिन स्ट्रिंग तुलना के लिए दोनों को वास्तव में एक ही प्रारूप में होना चाहिए।
— फेलिक्स क्लिंग

जवाबों:


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

1 जनवरी एक मनमाना तारीख है, इसका कोई मतलब नहीं है।


5
ध्यान दें : Date.parseब्राउज़र अंतर और विसंगतियों के कारण तार के साथ मजबूती से हतोत्साहित किया जाता है। MDN
— ज़ेव Isert

159

जैसा कि फेलिक्स क्लिंग ने टिप्पणियों में कहा, बशर्ते आपका समय 24 घंटे की घड़ी पर आधारित हो (और उन्हें ऐसा होना चाहिए कि कोई एएम / पीएम न हो) और बशर्ते वे हमेशा उस प्रारूप में हों जो 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 चेतावनी स्ट्रिंग स्ट्रिंग एक अधिक से अधिक किसी और चेतावनी स्ट्रिंग 2 अधिक से अधिक मुझे लगता है कि 12:00 01:00 से पिसाई यंत्र है है, लेकिन यह पता चलता है स्ट्रिंग 2 अधिक है
— अली

1
@ Mubeen1992: इसीलिए मेरे जवाब में यह कहा गया है कि यह समय 24 घंटे की घड़ी पर आधारित है। आपको अपने परिदृश्य के लिए एक अलग विधि का उपयोग करना होगा।
— एंडी ई

2
@ Mubeen1992: 1:10am24-घंटे के समय प्रारूप के रूप में अनियमित है। 01:10अधिक सही 01:10होगा और ठीक से तुलना करेगा 12:10। जैसा मैंने कहा, आपके तार के लिए, आपको एक अलग विधि का उपयोग करने की आवश्यकता है।
— एंडी ई

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 में दूसरा तर्क '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');
}

3

इस कोड को आज़माएं।

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 समाधान से इस फ़ंक्शन को बेहतर बनाया। मैंने सेकेंड्स की तुलना की। आप अपने उपयोग पर ध्यान देकर इस फ़ंक्शन में सेकंड लॉजिक जोड़ सकते हैं।

केवल "एचएच: मिमी" समय प्रारूप के लिए काम करें।

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'));

@ कामिल-पी को धन्यवाद


1

एमएस में कन्वर्ट का उपयोग कर समय की तुलना करने का सबसे अच्छा तरीका है

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

return minutesOfDay(now) > minutesOfDay(end);

ध्यान दें कि इस प्रश्न का पहले से ही स्वीकृत उत्तर है। कृपया अपने उत्तर को यह सुनिश्चित करने के लिए संपादित करें कि यह इस प्रश्न में पहले से मौजूद अन्य उत्तरों में सुधार करता है।
— hongsy

0

आप उन्हें ':' के साथ विभाजित करने के बाद दो मूल्यों की तुलना कर सकते हैं।


आपको उन्हें विभाजित करने की आवश्यकता क्यों होगी?
— होल्डऑफहंगर

ऐसा करने के लिए स्मार्ट तरीके हैं। जैसे: Date or moment.js का उपयोग करना
— Koray Küpe

0

मैं नियमित अभिव्यक्तियों के साथ इतना सहज नहीं हूं, और मेरा उदाहरण एक डेटाइमपिकर क्षेत्र से स्वरूपित m / d / Y h: mA है। इस कानूनी उदाहरण में, आपको वास्तविक बयान की सुनवाई से पहले पहुंचना होगा। मैं तिथियों को साफ करने के लिए प्रतिस्थापित फ़ंक्शन का उपयोग करता हूं ताकि मैं उन्हें दिनांक ऑब्जेक्ट के रूप में संसाधित कर सकूं और उनकी तुलना कर सकूं।

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
— स्टाइलएक्स

1
एसओ में आपका स्वागत है! यह कोड की थोड़ी व्याख्या और न केवल स्निपेट के लिए उपयोगी होगा।
— स्नाइपर

-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" है। यह घंटों को मिनट, मिनट को सेकंड के रूप में मान रहा है, और यह सेकंड को अनदेखा करता है: var stMin = (parseInt (sts [0]) * 60 + parseInt (sts [1]));
— होल्डऑफहंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.