我目前正在从事预订应用程序项目。我想根据时间范围对创建的路线进行排序,有人知道如何在javascript / jquery中对多个时间范围进行排序吗?
例如,我有ff。时间范围(我认为每个范围都应该视为一个对象吗?);
1:01 pm - 5:00 pm,
7:00 am - 8:00 am,
10:01 am - 1:00 pm,
8:01 am - 10:00 am,
像这样的东西
7:00 am - 8:00 am,
8:01 am - 10:00 am,
10:01 am - 1:00 pm,
1:01 pm - 5:00 pm
我还没有尝试过任何东西,因为我真的不知道从哪里开始。我希望对它的工作原理有所了解。预先谢谢您。
我对此进行了一些研究,但只找到了How to sort an array of objects with jquery or javascript,What is the best way to parse a time into a Date object from user input in Javascript?。因此,我对如何对时间进行排序有了想法,但是我不知道如何将其应用于时间范围。
正如我所说,我真的不知道从哪里开始,所以我还没有考虑它是数组还是对象。它可能是其中之一,我只需要知道它如何工作的想法即可。谢谢!
答案 0 :(得分:1)
使用Moment.js的一种解决方案如下所示。
var timeArr = ["1:01 pm - 5:00 pm", "7:00 am - 8:00 am", "10:01 am - 1:00 pm", "8:01 am - 10:00 am"];
var sortedTime = [];
var tempTimesArr = [];
// Changing start time of the range into timestamp for comparison later and storing index of original time range to use original time range for later
timeArr.forEach(function(singleTime, index){
var tempSingleTimeArr = singleTime.split("-");
tempTimesArr.push({ time: moment(tempSingleTimeArr[0].trim(), "hh:mm a").unix(), index: index });
});
// sorts on the basis of start time of the range
tempTimesArr.sort(function(a, b){ return a.time - b.time; });
// Assign original time range to the new array
tempTimesArr.forEach(function(t){
sortedTime.push(timeArr[t.index])
});
console.log(sortedTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
的控制台上检查排序的列表
答案 1 :(得分:1)
您可以编写自己的排序函数,并根据开始时间和结束时间之间的计算对数组进行排序,以根据时间范围对其进行排序。
var ranges = [{
starttime: new Date(0,0,0,9,30,0),
endtime: new Date(0,0,0,17,30,0),
},{
starttime: new Date(0,0,0,7,30,0),
endtime: new Date(0,0,0,8,30,0),
},{
starttime: new Date(0,0,0,11,30,0),
endtime: new Date(0,0,0,15,30,0),
}];
function compare(a,b) {
if (a.endtime - a.starttime < b.endtime - b.starttime)
return -1;
if (a.endtime - a.starttime > b.endtime - b.starttime)
return 1;
return 0;
}
ranges.sort(compare);
console.log(ranges)
答案 2 :(得分:0)
我修改了@MarkBaijens答案,因为它仅对startTime
进行排序。如果相同的多个starttime
与不同的endtime
不能正确排序。
var timeArr = ["1:01 pm - 5:00 pm", "7:00 am - 8:00 am", "10:01 am - 1:00 pm", "7:00 am - 8:30 am", "8:01 am - 10:00 am", "7:00 am - 7:50 am"];
var sortedTime = [];
var tempTimesArr = [];
// Changing start time of the range into timestamp for comparison later and storing index of original time range to use original time range for later
timeArr.forEach(function(singleTime, index){
var tempSingleTimeArr = singleTime.split("-");
tempTimesArr.push({ startTime: moment(tempSingleTimeArr[0].trim(), "hh:mm a").unix(), endTime: moment(tempSingleTimeArr[1].trim(), "hh:mm a").unix(), index: index });
});
// sorts on the basis of start time of the range
tempTimesArr.sort(function(a, b){ return ((a.startTime - b.startTime) === 0) ? (a.endTime - b.endTime) : (a.startTime - b.startTime);});
// Assign original time range to the new array
tempTimesArr.forEach(function(t){
sortedTime.push(timeArr[t.index])
});
console.log(sortedTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这是codepen
上的链接