首页 > 解决方案 > 对多个时间范围进行排序

问题描述

我目前正在处理一个预订应用程序项目。我想根据时间范围对创建的行程进行排序,有人知道如何在 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 a array of objects with jquery or javascript将时间从 Javascript 中的用户输入解析为 Date 对象的最佳方法是什么?. 因此,我正在了解如何对时间进行排序,但我不知道如何在时间范围内应用它。

正如我所说,我真的不知道从哪里开始,所以我还没有考虑它是数组还是对象。它可能是其中之一,我只需要知道它是如何工作的想法。谢谢!

标签: javascriptjquery

解决方案


使用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>

您可以在此小提琴的控制台上查看排序列表https://jsfiddle.net/nirmalrizal/3z90gpre/27/


推荐阅读