2016-05-13 182 views
1

Datatablesの最終日時ソートプラグイン(https://datatables.net/blog/2014-12-18)を使用して日付列をソートしていますが、正しいフォーマットで日付を正しくソートすることはできません。ページのロード時、以下のスクリプトが実行されます。jQuery Datatables究極の日付/時刻ソートプラグイン

//sets the date format for datatables for sorting purposes 
//reference: https://datatables.net/blog/2014-12-18 
$.fn.dataTable.moment('M/D/YYYY'); 

/* Datatables */ 
$('.datatable').DataTable({ 
    language : { 
     search : "_INPUT_", 
     searchPlaceholder : "Search...", 
     paginate : { 
      "next" : '<i class="fa fa-chevron-right"></i>', 
      "previous" : '<i class="fa fa-chevron-left"></i>' 
     } 
    }, 
    responsive : { 
     details : { 
      display : $.fn.dataTable.Responsive.display.childRowImmediate, 
      type : 'column' 
     } 
    }, 
    order : [0, 'desc'], 

    //date sorting 
    columnDefs: 
    { 
    targets: 'date_sortable', 
    render: function (data, type, full, meta) { 
     if(type === 'display'){ 
     if(data){ 
      var mDate = moment(data); 
      data = (mDate && mDate.isValid()) ? mDate.format("M/D/YYYY") : ""; 
      console.log('rewrote data to ' + data); 
     } 
    } 
     console.log('date_sortable rendered'); 
    return data; 
    } 
    } 
}); 

のDataTableのドキュメントと私はこのSOポスト(DataTables Ultimate date/time sorting plug-in not working with Intl formats)で見つかった詳細の両方によると、私は私の中<th />要素のクラス名としてdate_sortableを追加しましたHTMLですが、私のconsole.log[...]エントリは決して実行されないので、render関数が呼び出されていないようです。私は生成されたHTMLでクラスが私の<th />要素にあり、表示されている日付が適切な形式('n/j/Y'、PHP)であることが分かります。

すべてが正しく設定されているので、ヒント/ポインタはここにありますか?日付の順序は、本質的にむしろランダムであるように見えます。エントリは中央に表示される1/6/2016などの日付を持ちます(スクリーンショットを参照)。これはまったく意味がありません。

私はこのテーブルが〜2,055レコードを表示していると言いますので、それはおそらくパフォーマンスですか?現在、APIコールはロードされていないため、すべてのレコードは生成されたHTML内に単一のファイルとして格納されます。

Dates showing up in the middle

+1

ランダムではなく、数値ではなく文字列のソートです。この例では、2、2、2、6、7の順にソートされています。 –

答えて

0

あなたは、DataTableの中にシフトされていない機能を見ることができますか?

// Add type detection 
types.detect.unshift(function (d) { 
return moment(d, format, locale, true).isValid() ? 
    'moment-'+format : 
    null; 
}); 

それはケースだ場合、あなたはこれを使用する必要がありますが:

$.fn.dataTable.moment('YYYY-M-D'); 
+0

これを使ってデータを表示しています: '<?php echo date( 'n/j/Y'、strtotime($ order-> OrderDate )); ?> 'タイムスタンプに変換して並べ替えることで意味を明確にすることはできますか? PHPのどこか他の場所でこれを行うと言っていますか? – RubyHaus

+0

私はそれが汚い解決策のようにタイムスタンプでソリューションを削除しました!プロダクションコードには使わないでください! –

+0

私はunshift関数から返された瞬間は、ローカルの日付形式を使用していると思う - あなたのシステムの形式です。これは確かにn/j/Yとは異なります。 –

0

(これはあなたの日付フォーマットで動作します)このバイオリンを試してください:

`http://jsfiddle.net/Marouen/9qdj53am` 

は、これが役立つことを願っています。