tablesorter 按日期期间/日期格式排序 dd.mm.yyyy - dd.mm.yyyy
tablesorter sort by date period / date format dd.mm.yyyy - dd.mm.yyyy
我有以下 table:
<?php
$reqSQL = "SELECT * FROM data_cursanti , clients WHERE start_course > DATE_SUB(now(), INTERVAL 12 MONTH) ORDER BY data_cursanti.name ASC ";
$result = mysqli_query($conexiune, $reqSQL) or die("Error: " . mysqli_error($conexiune)); // sql query for results than the table
$counter = 1; // for rows counting
echo '<table id="users" class="tablesorter">
<thead>
<tr>
<th width="3%">No.</th>
<th width="15%">Name</th>
<th width="10%">Company</th>
<th width="7%">Course</th>
<th width="10%">Course Period</th>
</tr>
</thead>
<tbody>'
while ($row = mysqli_fetch_array($result)) {
$date1 = date('d.m.Y', strtotime($row['start_course']));
$date2 = date('d.m.Y', strtotime($rand['end_course']));
echo
'<tr>
<td width="3%">'.$counter.'</td>
<td width="15%">'.$row['name'].'</td>
<td width="10%">'.$row['company_name'].'</td>
<td width="7%">'.$row['course_type'].'</td>
<td width="10%">'.$date1.' - '.$date2.'</td>
</tr>'
$counter++;
} //end while loop
echo '</tbody>
</table>'; //close table
并使用以下解析器(从此处稍作修改:How to sort date with jquery tablesorter which is in format 'dd/mm/yyyy - dd/mm/yyyy')为 tablesorter 按我的课程期间列排序(该列使用日期格式 dd.mm.yyyy - dd.mm.yyyy):
$(function() {
$.tablesorter.addParser({
id: "date-range",
is: function(){
return false;
},
format: function(s, table, cell) {
var dates = s.replace(/(\d{1,2})[\/\.](\d{1,2})[\/\.](\d{4})/g, "//").split(' - '),
parsed = [];
if (dates.length) {
$.each(dates, function(i,d){
var v = new Date(d);
parsed.push($.type(v) === 'date' ? v.getTime() : d);
});
}
return parsed.length ? parsed.join('') : s;
},
parsed : true,
type: "text"
});
// and calling the parser after this script like this:
$(function() {
$("#users")
.tablesorter({widthFixed: true, widgets: ['zebra'], headers: {0: {sorter: false}, 4 : { sorter: 'date-range' }, {sortForce: [[0,0]]})
.tablesorterPager({container: $("#pager"), size: 20});
});
问题是 table 按第一个日期的 dd(天)部分排序,而不是我希望的月份!。有任何想法吗?我究竟做错了什么?有人可以修改我的代码以按第一个日期的 mm(月)值对 table 数据进行排序吗?我对 javascript 的了解几乎为零……谢谢!
LE:我也尝试使用 mottie 在第一个答案中提出的解决方案,但是 table 只是崩溃并且在我添加 4 时不会对任何内容进行排序:{ sorter: 'date-range' } 脚本中的一段代码。
问题是这个问题中的日期是用句点分隔的,而另一个问题的正则表达式使用的正则表达式只查找正斜杠或空格 (demo)。
此正则表达式适用于以“-
”、“/
”、“.
”或“[=”分隔的 mm-dd-yyyy 日期24=]"(空格)。</p>
<pre><code>var dates = s.replace(/(\d{1,2})[-./\s](\d{1,2})[-./\s](\d{4})/g, "//").split(' - ')
此外,sorter
设置需要针对最后一行:
$("table").tablesorter({
headers: {
4: {
sorter: 'date-range'
}
}
});
我有以下 table:
<?php
$reqSQL = "SELECT * FROM data_cursanti , clients WHERE start_course > DATE_SUB(now(), INTERVAL 12 MONTH) ORDER BY data_cursanti.name ASC ";
$result = mysqli_query($conexiune, $reqSQL) or die("Error: " . mysqli_error($conexiune)); // sql query for results than the table
$counter = 1; // for rows counting
echo '<table id="users" class="tablesorter">
<thead>
<tr>
<th width="3%">No.</th>
<th width="15%">Name</th>
<th width="10%">Company</th>
<th width="7%">Course</th>
<th width="10%">Course Period</th>
</tr>
</thead>
<tbody>'
while ($row = mysqli_fetch_array($result)) {
$date1 = date('d.m.Y', strtotime($row['start_course']));
$date2 = date('d.m.Y', strtotime($rand['end_course']));
echo
'<tr>
<td width="3%">'.$counter.'</td>
<td width="15%">'.$row['name'].'</td>
<td width="10%">'.$row['company_name'].'</td>
<td width="7%">'.$row['course_type'].'</td>
<td width="10%">'.$date1.' - '.$date2.'</td>
</tr>'
$counter++;
} //end while loop
echo '</tbody>
</table>'; //close table
并使用以下解析器(从此处稍作修改:How to sort date with jquery tablesorter which is in format 'dd/mm/yyyy - dd/mm/yyyy')为 tablesorter 按我的课程期间列排序(该列使用日期格式 dd.mm.yyyy - dd.mm.yyyy):
$(function() {
$.tablesorter.addParser({
id: "date-range",
is: function(){
return false;
},
format: function(s, table, cell) {
var dates = s.replace(/(\d{1,2})[\/\.](\d{1,2})[\/\.](\d{4})/g, "//").split(' - '),
parsed = [];
if (dates.length) {
$.each(dates, function(i,d){
var v = new Date(d);
parsed.push($.type(v) === 'date' ? v.getTime() : d);
});
}
return parsed.length ? parsed.join('') : s;
},
parsed : true,
type: "text"
});
// and calling the parser after this script like this:
$(function() {
$("#users")
.tablesorter({widthFixed: true, widgets: ['zebra'], headers: {0: {sorter: false}, 4 : { sorter: 'date-range' }, {sortForce: [[0,0]]})
.tablesorterPager({container: $("#pager"), size: 20});
});
问题是 table 按第一个日期的 dd(天)部分排序,而不是我希望的月份!。有任何想法吗?我究竟做错了什么?有人可以修改我的代码以按第一个日期的 mm(月)值对 table 数据进行排序吗?我对 javascript 的了解几乎为零……谢谢!
LE:我也尝试使用 mottie 在第一个答案中提出的解决方案,但是 table 只是崩溃并且在我添加 4 时不会对任何内容进行排序:{ sorter: 'date-range' } 脚本中的一段代码。
问题是这个问题中的日期是用句点分隔的,而另一个问题的正则表达式使用的正则表达式只查找正斜杠或空格 (demo)。
此正则表达式适用于以“-
”、“/
”、“.
”或“[=”分隔的 mm-dd-yyyy 日期24=]"(空格)。</p>
<pre><code>var dates = s.replace(/(\d{1,2})[-./\s](\d{1,2})[-./\s](\d{4})/g, "//").split(' - ')
此外,sorter
设置需要针对最后一行:
$("table").tablesorter({
headers: {
4: {
sorter: 'date-range'
}
}
});