データの表で並べ替える必要がある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>
:
PHPの配列のソートは何であるべきか?つまり、JS DataTableメソッドが並べ替え(何もしていない)を行っていない場合は、間違った並べ替えがPHP配列にあります。 PHPの部分の日付をソート – user907860
YYYY-MM-DDを使用すると、文字列としてきれいに並べ替えられます。 – RobG
@ user907860 'datatables'では、あなたが望むようにデータをソートすることができます。それは固定されたものではありません。問題は、JavaScriptの 'Date.parse()'が 'mm/dd/yyyy'の形式で日付を認識できず、それを文字列として扱うことになりました。 "" 01 "<" 06 "<" 12 "'アルファベット順になるので、それはそのように並べ替えるでしょう。 – Alex