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