我有一张桌子,其中一个名为" Laufzeit"将从票证中显示运行时间。我让我的sql数据库计算datetime字段和NOW()之间的差异。然后我使用javascript将客户端的格式转换为JSFiddle中可以看到的格式。
格式如下:6 Tage 09:47:15(天' Tage'小时:分钟:秒)
对于排序,我试试这个:https://datatables.net/blog/2014-12-18 它到目前为止工作,除了一件小事......当数据显示" 0天"时,它被排序到最后一个位置,而不是第一个位置。其余的排序是正确的。
有人可以帮帮我吗? 谢谢。 :)borsTiHD
<table class="dataTable" id="example"><tbody>
<tr>
<td>0 Tage 00:33:21</td>
</tr>
<tr>
<td>1 Tage 02:39:24</td>
</tr>
<tr>
<td>1 Tage 03:18:25</td>
</tr>
<tr>
<td>1 Tage 03:47:15</td>
</tr>
<tr>
<td>2 Tage 06:47:15</td>
</tr>
<tr>
<td>3 Tage 08:47:15</td>
</tr>
<tr>
<td>4 Tage 18:47:15</td>
</tr>
<tr>
<td>6 Tage 09:47:15</td>
</tr>
<tr>
<td>13 Tage 05:26:59</td>
</tr>
<tr>
<td>13 Tage 18:24:24</td>
</tr>
<tr>
<td>20 Tage 12:12:13</td>
</tr>
<tr>
<td>21 Tage 18:24:56</td>
</tr>
<tr>
<td>34 Tage 22:59:59</td>
</tr>
<tr>
<td>0 Tage 00:11:06</td>
</tr>
<tr>
<td>0 Tage 00:24:22</td>
</tr>
</tbody></table>
<script>
$.fn.dataTable.moment( 'DDD [Tage] HH:mm:ss' );
Table = $("#example").DataTable( {
paging: false,
searching: false,
responsive: true,
"bInfo" : true,
"ordering": true,
"columns": [
{ title: "Laufzeit:" },
],
});
</script>
PS:我的小提琴:
https://jsfiddle.net/borsTiHD/Lcnaq5gu/
答案 0 :(得分:0)
'0'不是一年中有效的日期documentation。当它被解析为时刻日期时,日期将改为当前日期。这是一个例子:
let codec: AVVideoCodecType = AVVideoCodecType.h264
console.log(moment('1 Tage 01:20:35', 'DDD [Tage] HH:mm:ss').format()) // 1st january
console.log(moment('15 Tage 01:20:35', 'DDD [Tage] HH:mm:ss').format()) // 15th january
console.log(moment('32 Tage 01:20:35', 'DDD [Tage] HH:mm:ss').format()) // 1st february
console.log(moment('0 Tage 01:20:35', 'DDD [Tage] HH:mm:ss').format()) // current date
因此,为了支持一年中的0天,您需要编写一个自定义排序函数,它将解析您的输入并处理排序。我已经使用正则表达式(tests)编写了一些非常基本的示例,并将提供的日期添加到当前日期:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
var types = $.fn.dataTable.ext.type;
// Add type detection
types.detect.unshift(function(d) {
return parseDate(d) ? 'custom-moment' : null;
});
// Add sorting method - use an integer for the sorting
types.order['custom-moment-pre'] = function(d) {
return moment().add(parseDate(d)).unix();
};
function parseDate(d) {
//Format: DDD [Tage] HH:mm:ss
var parsedDate = d.match(/^\s*(\d+) Tage (\d+):(\d+):(\d+)\s*$/);
if (!parsedDate) {
return undefined;
}
return {
days: parsedDate[1],
hours: parsedDate[2],
minutes: parsedDate[3],
seconds: parsedDate[4]
}
}
Table = $("#example").DataTable({
paging: false,
searching: false,
responsive: true,
"bInfo": true,
"ordering": true,
"columns": [{
title: "Laufzeit:"
}, ],
});