簡體   English   中英

在骨干/ Javascript中按24小時制對時間進行自定義排序

[英]Custom Sorting By 24-hour clock Time in Backbone/Javascript

我有由日期和24小時制時鍾組成的骨干集合。 我希望能夠按時間對我的收藏進行排序。

因此,由於正常的排序功能會像這樣對1:00、17:00和19:00進行排序(例如),因此我嘗試按該順序顯示17:00、19:00和1:00。 在這種情況下,第二天的1:00在時間19:00進行。

由於這種情況僅在值小於或等於12時發生,因此最簡單的解決方案似乎是:對大於12的值進行排序; 排序值小於12; 將小於12的排序值附加到大於12的值。因此,兩個單獨的排序列表。

    comparator: function( a, b ) {
                if(!this.sortColumn ) return 0;
                    if(sortColumn == 'time') {
    switch (a.get('time')) {
                case a > 12: return 1;
                case a <= 12: return 2;
            }
      }
}

這是我的一個粗略想法。 這不會對兩個組進行排序。 想法是大於12的情況先於小於12的情況,但是它們將不進行排序。

編輯:請注意,所有事件都在第1天的第1天的12:00 PM之后和第二天的第二天的12:00 PM之前發生。這就是為什么像1:00這樣的日期將在像19:00這樣的日期之后。

任何建議都太棒了。

謝謝

您可以將比較器函數定義為“ sortBy”

“ sortBy”比較器函數采用一個模型,並返回一個數字或字符串值,通過該數字或字符串值可以相對於其他模型對模型進行排序。

然后目標是產生與您的需求相對應的排序值。 正如@Pointy在評論中指出的那樣,在12:00之前的時間加上24可以解決問題

例如

var C = Backbone.Collection.extend({

    comparator: function (m) {
        var t = m.get('time'),
            h = parseInt(t.substr(0, 2), 10),
            m = parseInt(t.substr(3), 10);
        if (h<12) h = h+24;

        return h *60 + m;
    }

});

var c = new C([
    {time: '01:17'},
    {time: '01:00'},
    {time: '12:00'},
    {time: '07:00'},
    {time: '15:00'}
]);

console.log(c.pluck('time'));

http://jsfiddle.net/nikoshr/5srqn5b4/

我沒有看到僅按實際數字訂購它們的問題。

var times = [];
// generate some data..
// [1:00, 1:30, 2:00 ...]
for(var i=0; i < 24; i++){times.push(i.toString() + ':00');
times.push(i.toString() + ':30')}
// standard sorting
console.log(_.sortBy(times, function(num){ return num}))
> ["0:00", "0:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "1:00", "1:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30", "2:00", "2:30", "3:00", "3:30", "4:00", "4:30", "5:00", "5:30", "6:00", "6:30", "7:00", "7:30", "8:00", "8:30", "9:00", "9:30"]
// improved sorting
console.log(_.sortBy(times, function(num){ var key = parseInt(num.split(':')[0]); if (key >= 12) {return key - 12} return key + 20 }))
> ["12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30", "0:00", "0:30", "1:00", "1:30", "2:00", "2:30", "3:00", "3:30", "4:00", "4:30", "5:00", "5:30", "6:00", "6:30", "7:00", "7:30", "8:00", "8:30", "9:00", "9:30", "10:00", "10:30", "11:00", "11:30"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM