Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中按时间(格式:5:40 PM)排序以用于数据表?_Javascript_Jquery_Sorting_Time_Datatables - Fatal编程技术网

如何在javascript中按时间(格式:5:40 PM)排序以用于数据表?

如何在javascript中按时间(格式:5:40 PM)排序以用于数据表?,javascript,jquery,sorting,time,datatables,Javascript,Jquery,Sorting,Time,Datatables,我使用的数据表有5列() 这些列是 日期格式:1月5日 时间格式为:上午10:31(xx:xx) 第3、4、5列并不重要,它们只是数据,只要1和2是正确的,我就不关心排序 我想先按日期排序(最近的),然后按时间排序(最新的在顶部) 因此,1月5日下午4:58应该在凌晨4:58之前显示,显然所有其他数字也需要在所有其他时间工作。格式始终相同,即:上午12:34、下午4:15、上午12:00等 就日期而言,这已经非常有效了。datatable中只有2天的数据最大值,因此即使它滚动到本月的第一天,它仍

我使用的数据表有5列()

这些列是

  • 日期格式:1月5日
  • 时间格式为:上午10:31(xx:xx)
  • 第3、4、5列并不重要,它们只是数据,只要1和2是正确的,我就不关心排序 我想先按日期排序(最近的),然后按时间排序(最新的在顶部)

    因此,1月5日下午4:58应该在凌晨4:58之前显示,显然所有其他数字也需要在所有其他时间工作。格式始终相同,即:上午12:34、下午4:15、上午12:00等

    就日期而言,这已经非常有效了。datatable中只有2天的数据最大值,因此即使它滚动到本月的第一天,它仍然会显示在顶部,这很好。我已经看过了文档,我不知道如何对我的时间列进行正确的排序

    这是我的密码:

    oTable = $('#posts').dataTable({
        "bSort": true,
        "aaSorting": [ [0,'desc'], [1,'asc'] ],
        "aoColumns": [
                    null,
                    { "sType": 'time-sort' },
                    null,
                    null,
                    null
               ]
    
    });
    
    这里是:

    现在,我必须使用“aoColumns”的sType属性为时间构建某种自定义排序算法(您可以在上面的示例链接中看到,他区分大小写进行排序),我不知道如何做到这一点:(我甚至不确定我到目前为止是否做对了。这似乎对两列进行了很好的排序,但现在我需要确保时间合适

    这是我认为我需要的代码的另一部分。(再次,这是来自示例)。我99%确定这是我需要为升序和降序输入自定义时间排序代码的地方

    /* Define two custom functions (asc and desc) for time sorting */
    jQuery.fn.dataTableExt.oSort['time-sort-asc']  = function(x,y) {
        return ???;
    };
    
    jQuery.fn.dataTableExt.oSort['time-sort-desc'] = function(x,y) {
        return ???
    };
    

    可以通过将输入字符串中的时间解析为日期对象,然后比较日期对象来完成此操作:

    在此进行工作演示:

    资料来源:


    另请参见此答案:

    根据前面的示例进行详细说明;即使时间单元格为空,下面的代码片段也将进行排序

    function getTimeValue(x) {
      // if the cell is not empty then parse it, otherwise just return 0 as the value; so it will be sorted appropriately.      
      if (x != '') {
        var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/);  
        var h = parseInt(time[1]) + (time[3] ? 12 : 0);
        if(!time[3] && parseInt(time[1])==12) h = 0;
        if(time[3] && parseInt(time[1])==12) h = 12;
    
        return h * 60 + ( parseInt(time[2]) || 0 );
      } else {
        return 0;
      }
    }
    

    这就是我的工作

    jQuery.extend(jQuery.fn.dataTableExt.oSort, {
        "time-sort-pre": function(a) {
            if (a == '')
                return null;
    
            var time = a.match(/(\d+)(:(\d\d))?\s*(p?)/i);
            if (time == null)
                return null;
    
            var hours = parseInt(time[1], 10);
            if (hours == 12 && !time[4]) {
                hours = 0;
            }
            else {
                hours += (hours < 12 && time[4]) ? 12 : 0;
            }
    
            var d = new Date();
            d.setHours(hours);
            d.setMinutes(parseInt(time[3], 10) || 0);
            d.setSeconds(0, 0);
            return d;
        },
        "time-sort-asc": function(a, b) {
            return ((a < b) ? -1 : ((a > b) ? 1 : 0));
        },
        "time-sort-desc": function(a, b) {
            return ((a < b) ? 1 : ((a > b) ? -1 : 0));
        }
    });
    

    假设您的表中只有一列的时间值很有趣,我将对此进行检查。谢谢!它似乎仍然不起作用:我添加了一些更复杂的时间:为了这个示例,我还删除了多列排序,这样我们就可以完全消除该变量,只关注工作时间,而不是关系我先转到另一列进行排序。-12点问题已解决。-这一列应该可以工作。对前一列进行了大量修改。:)因此“2月28日”在“3月1日”上方,但“3月31日”在“4月1日”下方(即日历顺序颠倒)?最多只有2天的数据,…但它需要显示最新到最旧的数据。因此,4月1日在顶部,然后是3月31日、3月1日、2月28日(如果它显示了那么多数据,也就是说)现在我想起来了,我认为日期可能也需要自定义排序,但这并没有时间那么重要。我很快就能弄清楚。根据降序,月1日以上可能是高于或低于,这是不对的。是的,我认为它会被适当地按日期排序,这是迟钝的。但它只有1天我需要担心的是,时间是最重要的,然后我会计算出日期
    $('#datatable-list').dataTable(
        aoColumns: [{sType: "time-sort"}]
    );