无需时间即可格式化jQuery数据表的日期

时间:2018-09-22 19:52:58

标签: jquery datetime datatables

我正在尝试以纯日期格式显示来自SQL数据库的日期,没有时间信息,并且不会丢失排序功能。

我尝试了不同的方法,但仍然无法正常工作。

  1. 我试图在SQL查询中转换为日期且没有时间:

    select ..., CAST(t.StartDate AS DATE) StartDate, ...
    
  2. 我尝试了一个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);
            }
        }
    ],
    
  3. 尝试使用“ 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。

2 个答案:

答案 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;
}