我正在尝试对数组进行排序。
数组由时间格式的数据组成。
阵列:
'9:15 AM', '10:20 AM', '02:15 PM'
我应该如何排序?
我正在获取此数据usig json service&用它来列出jquery mobile的listview中的事件。但我想按时间对事件进行排序。
更新: 我如何按日期和时间从JSON分类数据:
对于我的特殊排序数据问题,使用json按日期&我这样做的时间:
$.getJSON(serviceURL + 'read.php?month_no='+month_no, function(data) {
events = data.data;
events.sort(function(a,b){
a = new Date(a.event_date+' '+a.event_time);
b = new Date(b.event_date+' '+b.event_time);
return a<b?-1:a>b?1:0;
});
});
答案 0 :(得分:30)
试试这个
var times = ['01:00 am', '06:00 pm', '12:00 pm', '03:00 am', '12:00 am'];
times.sort(function (a, b) {
return new Date('1970/01/01 ' + a) - new Date('1970/01/01 ' + b);
});
console.log(times);
答案 1 :(得分:3)
我的解决方案(对于像#&#34; 11:00&#34;,&#34; 16:30&#34; ...)的时间格式化
sortTimes: function (array) {
return array.sort(function (a, b) {
if (parseInt(a.split(":")[0]) - parseInt(b.split(":")[0]) === 0) {
return parseInt(a.split(":")[1]) - parseInt(b.split(":")[1]);
} else {
return parseInt(a.split(":")[0]) - parseInt(b.split(":")[0]);
}
})
}
如果有人想知道哈哈
答案 2 :(得分:2)
实现sort(compare)函数并使用任意日期比较日期字符串:
Array.sort(function (a, b) {
return Date.parse('01/01/2013 '+a) - Date.parse('01/01/2013 '+b)
});
01/01/2013 是任意日期。
答案 3 :(得分:1)
var a = ['9:15 AM', '10:20 AM', '02:15 PM'];
var sort = function(a){
var sa = [],
d = new Date(),
ds = d.toDateString();
for(var i = 0; i < a.length; i++){
d = new Date(ds + ' ' + a[i]);
sa.push(d);
}
sa.sort(function(a, b){return a.getTime() - b.getTime();})
return sa;
}
答案 4 :(得分:1)
function sortTimes(arrayOfTimes) {
return arrayOfTimes.sort((a, b) => {
const aParts = getNumericParts(a);
const bParts = getNumericParts(b);
// Sorts by hour then minute
return aParts[0] - bParts[0] || aParts[1] - bParts[1];
});
function getNumericParts(time) {
// accounts formats of 9:15 AM and 09:15:30 but does not handle AM/PM in comparison
return time.split(' ')[0].split(':').map(x => +x);
}
}
这是达斯汀·丝克(Dustin Silk)的答案的一种更为简洁和高效的变化。尽管它不是基于秒排序的,但它考虑了9:15 AM,09:15和09:15:30的格式。您可以通过将|| aParts[2] - bParts[2]
用作return语句的一部分来添加它。
sortTimes(['08:00', '09:00', '05:00', '08:15', '08:00'])
// Output ["05:00", "08:00", "08:00", "08:15", "09:00"]