2017-06-22 7 views
1

データの表で並べ替える必要があるmm/dd/yyyyの形式の日付とバッチがあります。これらの日付は、PHPを使用したループでエコーされます。 DataTableが正しく名前をソートしますJS Data Tablesプラグインを使用して通常の米国日付を正しく並べ替える方法

$(document).ready(function(){ 
    $('.cdates').DataTable({ 
     pageLength:25, 
     responsive:true, 
     dom: '<"html5buttons"B>lTfgitp', 
     buttons: [ 
      {extend: 'copy'}, 
      {extend: 'csv'}, 
      {extend: 'excel', title: 'name'}, 
      {extend: 'pdf', title: 'name'}, 

      {extend: 'print', 
       customize: function (win){ 
        $(win.document.body).css('font-size', '10px'); 

        $(win.document.body).find('table') 
          .addClass('compact') 
          .css('font-size', 'inherit'); 
       } 
      } 
     ] 
    }); 
}); 

<!-- 
    Assume datatables plugin is loaded, and 
    a PHP var named $arr is loaded and has the 
    structure: 
     $arr['mm/dd/yyyy'] => 'name' 
--> 
<table class="table cdates"> 
    <thead> 
     <tr> 
     <th>Date</th> 
     <th>Name</th> 
     </tr> 
    </thead> 
    <tbody> 
    <?php 
     foreach($arr as $date => $name){ 
    ?> 
     <tr class="crow"> 
      <td><?php echo $date; ?></td> 
      <td><?php echo $name; ?></td> 
     </tr> 
    <?php 
     } 
    ?> 
    <tbody> 
</table> 

すでにロードされているcdatatable.jsというJavaScriptファイルの内部では、私は次のコードを持っている:私のコード(index.php)はこのようになります残念ながら、日付は文字列として扱われるため、数字でソートされます。たとえば、私は、次の表がある場合:

Date  Name 
--------- | ------- 
01/02/2003 My Name 
12/01/2012 Hello world 
06/20/2002 Name 2 

をそして、私はDateことによってそれをソートし、それが現在返します

Date  Name 
--------- | ------- 
01/02/2003 My Name 
06/20/2002 Name 2 
12/01/2012 Hello world 

それは返すべきである:

Date  Name 
--------- | ------- 
06/20/2002 Name 2 
01/02/2003 My Name 
12/01/2012 Hello world 

私が見てきました異なる国の日付を並べ替えることに関する他にもたくさんの質問がありますが、本当に私には当てはまりませんでした。私はまた、文字列をJSの日付に変換し、その値を行に適用しようとしました。それは動作するようには思われず、同じ問題が発生します。

PHPで私の日付をJavaScriptに認識される日付に変換できる方法はありますか?それが不可能な場合は、私の列を「日付」列として認識するためにdataTablesに追加できるものはありますか?下の行で

<td><?php echo $date; ?></td> 

+1

PHPの配列のソートは何であるべきか?つまり、JS DataTableメソッドが並べ替え(何もしていない)を行っていない場合は、間違った並べ替えがPHP配列にあります。 PHPの部分の日付をソート – user907860

+0

YYYY-MM-DDを使用すると、文字列としてきれいに並べ替えられます。 – RobG

+0

@ user907860 'datatables'では、あなたが望むようにデータをソートすることができます。それは固定されたものではありません。問題は、JavaScriptの 'Date.parse()'が 'mm/dd/yyyy'の形式で日付を認識できず、それを文字列として扱うことになりました。 "" 01 "<" 06 "<" 12 "'アルファベット順になるので、それはそのように並べ替えるでしょう。 – Alex

答えて

1

最も簡単な解決策は、この行を置き換えることであろう別の解決策は、mm/dd/YYYY形式で日付を受け入れるようにdate-ukプラグインを修正するだろう

<td data-order="<?php echo strtotime($date); ?>"><?php echo $date; ?></td> 

が、上記のソリューションは、より簡単で高速になる可能性があります。

+0

'data-order'がトリックをしました!どうもありがとうございます! – Alex

0
<table class="table cdates"> 
    <thead> 
     <tr>Date</tr> 
     <tr>Name</tr> 
    </thead> 

<table class="table cdates"> 
    <thead> 
     <tr> 
      <th>Date</th> 
      <th>Name</th> 
     </tr> 
    </thead> 
+0

申し訳ありませんが、私は最小限のサンプルを投稿していて、正しくフォーマットするのを忘れていました。コードが更新されました! – Alex

+0

:(私はそれが問題だったと思っていましたね。 – Bindrid

+0

それは大丈夫です!データオーダーのトリックが働いていました。私はちょうど 'YYYY-mm-dd'の形式で非表示の日付を作成しなければなりませんでした。 – Alex

関連する問題