我正在尝试以纯日期格式显示来自SQL数据库的日期,没有时间信息,并且不会丢失排序功能。
我尝试了不同的方法,但仍然无法正常工作。
我试图在SQL查询中转换为日期且没有时间:
select ..., CAST(t.StartDate AS DATE) StartDate, ...
我尝试了一个javascript函数将其转换为日期字符串;可以很好地显示,但在数据表中的排序方式类似于字符串,而不是日期:
function stringToDatestamp(dateString) {
var date = new Date(dateString);
var yr = date.getFullYear();
var mo = date.getMonth() + 1;
var d = date.getDate();
var month = mo < 10 ? '0' + mo : mo;
var day = d < 10 ? '0' + d : d;
var newDateString = month + '/' + day + "/" + yr;
return newDateString;
}
"columnDefs": [
....
{
"targets": [6],
"render": function (data, type, row) {
if (null == data)
return data;
return stringToDatestamp(data);
}
}
],
尝试使用“ moment.js”格式化程序:
function stringToDatestamp(dateString) {debugger
var date = moment(dateString).format("MM/dd/yyyy");
return date;
}
// This display 2018-10-26T00:00:00 as 10/Fr/yyyy
即使我在SQL查询中使用的是CAST,数据也不会格式化为2018-10-26T00:00:00。
答案 0 :(得分:0)
不确定这是否有帮助,但您可能需要考虑toLocaleDateString()
这比您的stringToDatestamp函数更简洁。
示例:
var date = new Date();
var today = date.toLocaleDateString();
console.log('today is:', today)
对于表,也许可以将每个单元格的值保留为原始数据对象以进行排序,然后在html中显示toLocaleDateString()的结果。
答案 1 :(得分:0)
我在问题中列出的第三个选项是(部分)正确的。我使用MM / dd / yyyy作为格式字符串,但在moment.js中,正确的字符串是MM / DD / YYYY。
我注册了格式后就可以正常工作。
$(document).ready(function () {
//register the date/time format(s) that you wish DataTables to detect and order
$.fn.dataTable.moment('MM/DD/YYYY');
....
})
然后在渲染器中:(第7列是我的日期)
"columnDefs": [
{
"targets": [6],
"render": function (data, type, row) {
if (null == data)
return data;
return stringToDatestamp(data);
}
}
],
Javascript:
function stringToDatestamp(dateString) {
var date = moment(dateString).format("MM/DD/YYYY");
return date;
}