【问题标题】:Displaying the just date not time part in jquery dataTable but sorting on both date and timepart?在jquery dataTable中显示只是日期而不是时间部分,但在日期和时间部分上排序?
【发布时间】:2012-12-09 08:47:02
【问题描述】:

我正在从服务器发送日期作为字符串,如下所述,其中包含日期和时间部分,如 2010-12-07 17:35:04.127。 我想要的只是在数据表列中显示日期而不是时间部分,即 2010-12-07。但我也希望排序发生 在完整的日期,包括时间部分。所以上面应该显示在 2010-12-07 18:35:04.12 创建的客户 2010-12-07 17:35:04.12 在数据表列中。这是我在数据表中的具体日期列代码 sn-p

  "aoColumns": [ { "mDataProp": "customerCreated","bSearchable": false,
                           "fnRender": function ( o, val  ) 
                               {
                               var javascriptDate = new Date(o.aData["customerCreated"]);
                               javascriptDate = javascriptDate.getFullYear()+"/"+javascriptDate.getMonth()+"/"+javascriptDate.getDate();
                               return "<div class= date>"+javascriptDate+"<div>";
                               }

                       } ]

我面临的问题是:-

1)在 IE 和 Mozilla 上,日期显示为 NaN/NaN/NaN。 不明白为什么?

2)在 Chrome 上显示日期,但显示月份减 1。为什么 javascriptDate.getMonth() 返回月份减 1?

3)如果采用上述路线,我只显示日期部分但希望在包括日期部分在内的完整日期进行排序,我不确定排序是否有效?

仅供参考 我将 bserverSide 用作 false 。基本上我是一次性从服务器获取数据并在客户端进行排序?

【问题讨论】:

    标签: javascript jquery-ui datetime datatables


    【解决方案1】:

    JS 月份以 0 开头,日期需要 / 而不是 -

    Problem with date formats in JavaScript with different browsers相关

    试试这个DEMO

    function getFormattedDate(dString) {
      var d = new Date(dString.split(".")[0].replace(/-/g,"/")); // assuming 2010-12-07 17:35:04.127
      var mm = d.getMonth()+1;
      var dd = d.getDate();
      if (mm<10)mm="0"+mm;
      if (dd<10)dd="0"+dd;
      return d.getFullYear()+"/"+mm+"/"+dd;
    }
    
    "aoColumns": [ { "mDataProp": "customerCreated","bSearchable": false,
      "fnRender": function ( o, val  ) {
        return "<div class= date>"+getFormattedDate(o.aData["customerCreated"])+"<div>";
      }
    } ]
    

    如果你也需要时间的话

    function getFormattedDate(dString) {
      var d = new Date(dString.split(".")[0].replace(/-/g,"/")); // assuming 2010-12-07 17:35:04.127
      var mm = d.getMonth()+1;
      var dd = d.getDate();
      if (mm<10)mm="0"+mm;
      if (dd<10)dd="0"+dd;
      var hh = d.getHours();
      var min = d.getMinutes();
      if (hh<10) hh="0"+hh;
      if (min<10) min="0"+min;
      return d.getFullYear()+"/"+mm+"/"+dd+" "+hh+":"+min;
    }
    

    【讨论】:

    • 感谢 mplungjan。关于日期显示,它工作得很好。但是排序没有正确发生。我的意思是在 2010-12-07 17:35:04.12 创建的客户显示在之后创建的客户的数据表中,即 2010-12-07 18:20:02.16。我的意思是排序不适用于在同一日期创建的客户。看起来它正在发生,因为我们从日期中删除了时间部分。有没有一种解决方案,我可以只显示不包括时间部分的日期,但根据日期和时间进行排序?
    • 我不知道该列的排序方式。我们可以添加时间
    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多