Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 如何在数据表中使用dd-MMM-yyy-hh:mm-tt格式对日期进行排序_Javascript_Jquery_Datatables - Fatal编程技术网

Javascript 如何在数据表中使用dd-MMM-yyy-hh:mm-tt格式对日期进行排序

Javascript 如何在数据表中使用dd-MMM-yyy-hh:mm-tt格式对日期进行排序,javascript,jquery,datatables,Javascript,Jquery,Datatables,我目前正在处理datatable,我发现日期列的排序不起作用。这是我的截图 这是我的密码 <table id="tbl" class="table table-small-font table-bordered table-striped"> <thead> <tr> <th>&nbsp;</th> <th class="text-left">Dated</th>

我目前正在处理datatable,我发现日期列的排序不起作用。这是我的截图

这是我的密码

<table id="tbl" class="table table-small-font table-bordered table-striped">
  <thead>
    <tr>
      <th>&nbsp;</th>
      <th class="text-left">Dated</th>
      <th class="text-left">Day</th>
      <th class="text-center">Remarks</th>
      <th class="text-center">State</th>
      <th class="text-center"></th>
    </tr>
  </thead>
  <tbody>
    @{ IEnumerable
    <PublicHoliday> PublicHolidays = (IEnumerable
      <PublicHoliday>)ViewData["PublicHolidays"]; int Idx = 1; } @foreach (var i in PublicHolidays) {
        <tr>
          <td>@Idx</td>
          <td>@i.Dated.ToString("dd-MMM-yyyy hh:mm tt")</td>
          <td>@i.Dated.ToString("ddd")</td>
          <td>@Html.DisplayFor(x => i.Remarks)</td>
          <td>@i.ForStateName</td>
          <td><a data-toggle="tooltip" title="Delete" onclick="DeleteRecord(@i.Id);"><span class="glyphicon glyphicon-remove"></span></a></td>
        </tr>
        Idx++; }
  </tbody>
</table>
<script src="~/lib/jquery-ui-1.12.1/jquery-ui.min.js"></script>
<script src="~/js/jquery.dataTables.min.js"></script>
<script src="~/js/dataTables.bootstrap.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    var tbl = $('#tbl').DataTable({
      dom: "<'row'<'col-sm-6 col-xs-7'l><'col-sm-6 col-xs-7'f>>" + "rtip",
      order: [
        [0, "asc"]
      ],
      pagingType: "numbers",
      iDisplayLength: 50
    });
  });
</script>

过时的
白天
评论
陈述
@{IEnumerable
公共假日=(IEnumerable)
)ViewData[“PublicHolidays”];int Idx=1;}@foreach(PublicHolidays中的变量i){
@Idx
@i、 日期:ToString(“dd-MMM-yyy-hh:mm-tt”)
@i、 日期:ToString(“ddd”)
@DisplayFor(x=>i.comments)
@i、 ForStateName
Idx++;}
$(文档).ready(函数(){
变量tbl=$('#tbl')。数据表({
dom:“+”rtip“,
订单:[
[0,“asc”]
],
分页类型:“数字”,
i显示长度:50
});
});

排序列根本不起作用,我从datatable中找不到任何插件可供使用。任何人都请帮忙。。提前感谢

我不确定是否有任何插件支持
日期dd MMM yyy hh:mm tt格式

所以我修改了插件以支持这种格式

这是它的代码。在加载
datatable
插件后加载这段代码

   (function() {

       var customDateDDMMMYYYYToOrd = function(date) {
         var dateTime = date.split(' '),
           dateObj = new Date(dateTime[0].replace(/-/g, ' ')),
           time = "00:00",
           type = "AM";
         if (dateTime.length > 1) { // if time part and am/pm part is available
           time = dateTime[1],
             type = dateTime[2];
         }

         var splitTime = time.split(":"),
           hours = type == "PM" ? Number(splitTime[0]) + 12 : Number(splitTime[0]),
           minutes = Number(splitTime[1]),
           seconds = 0,
           milliseconds = 0;
         return new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate(), hours, minutes, seconds, milliseconds);
       };

       // This will help DataTables magic detect the "dd-MMM-yyyy" format; Unshift
       // so that it's the first data type (so it takes priority over existing)
       jQuery.fn.dataTableExt.aTypes.unshift(
         function(sData) {
           "use strict"; //let's avoid tom-foolery in this function
           if (/^([0-2]?\d|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-\d{4}/i.test(sData)) {
             return 'date-dd-mmm-yyyy';
           }
           return null;
         }
       );

       // define the sorts
       jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-asc'] = function(a, b) {
         "use strict"; //let's avoid tom-foolery in this function
         var ordA = customDateDDMMMYYYYToOrd(a),
           ordB = customDateDDMMMYYYYToOrd(b);
         return (ordA < ordB) ? -1 : ((ordA > ordB) ? 1 : 0);
       };

       jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-desc'] = function(a, b) {
         "use strict"; //let's avoid tom-foolery in this function
         var ordA = customDateDDMMMYYYYToOrd(a),
           ordB = customDateDDMMMYYYYToOrd(b);
         return (ordA < ordB) ? 1 : ((ordA > ordB) ? -1 : 0);
       };

     })();
您可以找到可用于
datatable

注:

请注意,此插件已**弃用*。这个 插件提供了增强的功能和灵活性


由于2017年1月2日凌晨12:00等是有效的RFC2822日期,您只需将列
类型设置为
日期

columnDefs: [
  { targets: 1, type: 'date' }
]
或者,如果数据中有一些奇数值,比如
null
值,您可以通过强制进行正确排序(我想这才是真正的问题),将解析后的值传回并按数字排序:

这里真的不需要特殊的排序插件。第三个选项是将未格式化的日期设置为

<td data-sort="@i.Dated.ToString()">@i.Dated.ToString("dd-MMM-yyyy hh:mm tt")</td>
@i.Dated.ToString(“dd-MMM-yyy-hh:mm-tt”)

我使用momentjs和lodash,它希望:

var records = [
    ["1", "28-Jan-2017 12:00 AM"],
    ["1", "28-May-2017 12:00 AM"],
    ["1", "28-Mar-2017 12:00 AM"]
];

records = _.map(records, record => {
    record.push(moment(record[1], "DD-MMM-YYYY hh:mm A").unix());
    return record;
});

$(document).ready(function() {
    $('#example').DataTable( {
        data: records,
        columns: [
            { title: "id" },
            { title: "date" },
            { title: "ts"}
        ],
        'columnDefs': [
            { 'orderData':[2] },
            {
              'targets': [2],
              'visible': false
            },
        ],
    });
});

$(document).ready(function() {
    $('#example').DataTable( {
        data: records,
        columns: [
            { title: "id" },
            { title: "date" },
            { title: "ts"}
        ],
        'columnDefs': [
                    { 'orderData':[2] },
                    {
                    'targets': [2],
                    'visible': false
                    },
                ],
    });
});

以下是

您可以将以下排序方法添加到选项中,以便根据日期和时间进行排序,特别是如果您的时间为12小时(AM/PM)格式。我使用以下代码,它对我有效:

$('#tableid').DataTable({ "order": [[, 'desc']],//order column in descending order. "columnDefs": [ { "type": "date", "targets": }//date column formatted like "03/23/2018 10:25:13 AM". ], "pageLength": 25 }); $('#tableid')。数据表({ “顺序”:[,'desc']],//按降序排列列。 “columnDefs”:[ {“type”:“date”,“targets”:}//date列格式类似于“03/23/2018 10:25:13 AM”。 ], “页面长度”:25 });
也许你可以通过将日期转换为时间戳(long)来添加一个隐藏列,并按照它进行排序,ref:@Yu LinChen,我想提出同样的建议,我以前已经做过很多次了,处理long更容易。我可以知道代码是什么样子吗?@leeyuanye,我在下面添加了示例代码:请问在一个数据表中是否有两种不同的日期格式。你将如何处理?一种日期格式是dd-MMM-yyy-hh:mm-tt,另一种是dd-MMM-yyyy@LeeYuanYee如果hh:mm part为空,将修改其排序的代码它将是什么样子?@LeeYuanYee。修改。请检查。不,不会。所以我在这里尝试按空格分割它。正常情况下,它将是dd-MMM-yyyy hh:mm tt,并将被分割为3。现在在我们的特殊情况下,它将只有dd-MMM-yyyy partSir,Date.parse('02-Jan-2017 12:00 am')在ie 11中不起作用,在FF 57(Quantum)中也不起作用。但它在Chrome中起作用
var records = [
    ["1", "28-Jan-2017 12:00 AM"],
    ["1", "28-May-2017 12:00 AM"],
    ["1", "28-Mar-2017 12:00 AM"]
];

records = _.map(records, record => {
    record.push(moment(record[1], "DD-MMM-YYYY hh:mm A").unix());
    return record;
});

$(document).ready(function() {
    $('#example').DataTable( {
        data: records,
        columns: [
            { title: "id" },
            { title: "date" },
            { title: "ts"}
        ],
        'columnDefs': [
            { 'orderData':[2] },
            {
              'targets': [2],
              'visible': false
            },
        ],
    });
});

$(document).ready(function() {
    $('#example').DataTable( {
        data: records,
        columns: [
            { title: "id" },
            { title: "date" },
            { title: "ts"}
        ],
        'columnDefs': [
                    { 'orderData':[2] },
                    {
                    'targets': [2],
                    'visible': false
                    },
                ],
    });
});
$('#tableid').DataTable({ "order": [[, 'desc']],//order column in descending order. "columnDefs": [ { "type": "date", "targets": }//date column formatted like "03/23/2018 10:25:13 AM". ], "pageLength": 25 });