У мене є дві строки часу у форматі HH: MM: SS . Наприклад, str1містить 10:20:45, str2містить 5:10:10.
Як я можу порівняти наведені вище значення?
У мене є дві строки часу у форматі HH: MM: SS . Наприклад, str1містить 10:20:45, str2містить 5:10:10.
Як я можу порівняти наведені вище значення?
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 січня - довільна дата, нічого не означає.
Як сказав Фелікс Клінг у коментарях, за умови, що ваш час базується на 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 рядок попереджувального рядка, один більше, інакше рядок попередження 2 більший, я думаю, що 12 вечора є більшим за 1 ранку, але він показує, що рядок 2 більший
1:10amє нерегулярним як цілодобовий формат часу. 01:10було б правильнішим і правильно 01:10порівнювалося б із 12:10. Як я вже сказав, для ваших рядків вам потрібно використовувати інший метод.
Спробуйте цей код протягом 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 шукати шаблон по всьому рядку, створюючи масив усіх випадків, які він може знайти, що відповідають даному шаблону. Нижче код працює, лише якщо час у форматі 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');
}
Перетворити в секунди ці рядки:
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. Я проігнорував порівняння секунд. Ви можете додати секундологічну логіку до цієї функції, звертаючи увагу на ваше використання.
Працюйте лише для часового формату "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
Найкращий спосіб порівняти час за допомогою перетворення в мс
var minutesOfDay = function(m){
return m.minutes() + m.hours() * 60;
}
return minutesOfDay(now) > minutesOfDay(end);
Ви можете порівняти два значення одразу після того, як розділили їх на ':'.
Мені не так зручно користуватися регулярними виразами, і мій приклад є результатом поля datetimepicker у форматі m / d / Y h: mA. У цьому юридичному прикладі ви повинні прибути до фактичного слухання депозитів. Я використовую функцію 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;
}
Думаю, ви можете сформулювати це так.
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...
}