Tôi có hai chuỗi thời gian ở định dạng HH: MM: SS . Ví dụ, str1chứa 10:20:45, str2chứa 5:10:10.
Làm cách nào để so sánh các giá trị trên?
Tôi có hai chuỗi thời gian ở định dạng HH: MM: SS . Ví dụ, str1chứa 10:20:45, str2chứa 5:10:10.
Làm cách nào để so sánh các giá trị trên?
5:10:10không phải HH:MM...nó là duy nhất H:MM:.... Nhưng để so sánh chuỗi, cả hai thực sự phải ở cùng một định dạng.
Câu trả lời:
Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10')
> true
Ngày 1 tháng Giêng là một ngày tùy ý, không có ý nghĩa gì cả.
Date.parseđược khuyến khích do sự khác biệt và không nhất quán của trình duyệt. MDN
Như Felix Kling đã nói trong các nhận xét, với điều kiện thời gian của bạn dựa trên đồng hồ 24 giờ (và đúng như vậy nếu không có SA / CH) và miễn là chúng luôn ở định dạng HH:MM:SSmà bạn có thể thực hiện so sánh chuỗi trực tiếp:
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"với str2 = "01:10"và kiểm tra xem nếu chuỗi 1 lớn hơn thì chuỗi 2 chuỗi cảnh báo một chuỗi lớn hơn còn lại chuỗi cảnh báo 2 lớn hơn Tôi nghĩ 12PM lớn hơn 1AM nhưng nó cho thấy chuỗi 2 lớn hơn
1:10amlà định dạng thời gian 24 giờ không đều. 01:10sẽ đúng hơn và 01:10sẽ so sánh đúng với 12:10. Như tôi đã nói, đối với chuỗi của bạn, bạn cần sử dụng một phương pháp khác.
Hãy thử mã này cho định dạng thời gian 24 giờ.
<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>
Bạn có thể dễ dàng làm điều đó với mã dưới đây:
Lưu ý : Đối số thứ hai trong RegExp là 'g' là cờ tìm kiếm toàn cục. Cờ tìm kiếm toàn cục làm cho RegExp tìm kiếm một mẫu trong suốt chuỗi, tạo ra một mảng tất cả các lần xuất hiện mà nó có thể tìm thấy khớp với mẫu đã cho. Mã bên dưới chỉ hoạt động nếu thời gian ở định dạng HH: MM: SS tức là định dạng thời gian 24 giờ .
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');
}
Chuyển đổi thành giây các chuỗi đó:
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...
Tôi đã cải thiện chức năng này từ giải pháp @ kamil-p. Tôi bỏ qua giây so sánh. Bạn có thể thêm logic giây vào chức năng này bằng cách chú ý đến việc sử dụng.
Chỉ làm việc cho định dạng thời gian "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;
}
}
thí dụ
alert(compareTime('8:30','11:20'));
Cảm ơn @ kamil-p
Cách tốt nhất để so sánh thời gian bằng cách sử dụng chuyển đổi thành ms
var minutesOfDay = function(m){
return m.minutes() + m.hours() * 60;
}
return minutesOfDay(now) > minutesOfDay(end);
Bạn có thể so sánh hai giá trị ngay sau khi tách chúng bằng ':'.
Tôi không thoải mái lắm với các biểu thức chính quy và ví dụ của tôi là kết quả từ trường bộ chọn ngày có định dạng m / d / Y h: mA. Trong ví dụ pháp lý này, bạn phải đến trước phiên điều trần thực tế về việc bãi nại. Tôi sử dụng chức năng thay thế để xóa ngày tháng để tôi có thể xử lý chúng dưới dạng đối tượng Ngày tháng và so sánh chúng.
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;
}
Tôi nghĩ bạn có thể đặt nó như thế này.
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>
Đặt phần thời gian được trích xuất thành các biến.
// 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;
}
}
}
1cho 0:0:5, 0:1:0ghép nối và điều đó là sai.
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...
}