【问题标题】:tablesorter sort by date period / date format dd.mm.yyyy - dd.mm.yyyytablesorter 按日期周期/日期格式排序 dd.mm.yyyy - dd.mm.yyyy
【发布时间】:2015-02-19 10:21:12
【问题描述】:

我有下表:

    <?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')让表格排序器按我的课程期间列进行排序(该列使用日期格式 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, "$2/$1/$3").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});
});

问题是表格按第一个日期的 dd(天)部分排序,而不是我希望的月份!。有任何想法吗?我究竟做错了什么?有人可以修改我的代码以按第一个日期的 mm(月)值对表数据进行排序吗?我对 javascript 的了解几乎为零……谢谢!

LE:我也尝试使用 mottie 在第一个答案中提出的解决方案,但是当我添加 4 : { sorter: 'date-range' }剧本。

【问题讨论】:

  • 我对这个插件一无所知,但看到你的代码,我发现解析器类型设置为“文本”。是否必须将其定义为“日期”才能使排序正常工作(假设“日期”是此插件中的合法标识符)?
  • 似乎是个好主意...蝙蝠 din 没有改变排序结构中的任何内容...仍然按天而不是按月排序...

标签: jquery sorting tablesorter


【解决方案1】:

问题是这个问题中的日期用句点分隔,而另一个问题的正则表达式使用的是正则表达式,它只查找正斜杠或空格 (demo)。

此正则表达式适用于以“-”、“/”、“.”或“”(空格)分隔的 mm-dd-yyyy 日期。

var dates = s.replace(/(\d{1,2})[-./\s](\d{1,2})[-./\s](\d{4})/g, "$2/$1/$3").split(' - ')

另外,sorter 设置需要针对最后一行:

$("table").tablesorter({
    headers: {
        4: {
            sorter: 'date-range'
        }
    }
});

【讨论】:

  • 好的,这适用于演示页面,但不适用于我的实际站点。按照您的建议更改代码后,我仍然得到按天而不是按月排序的日期。我将日期以 yyyy-mm-dd 格式存储在 mysql 数据库中,并通过 strtotime 和如下变量在表中调用它们: while($row = mysqli_fetch_array($rezultat) ) $date1 = date('dmY' ,strtotime($row['start_course'])); $date2 = date('d.m.Y',strtotime($row['end_course'])); and echo' //其余表格代码 // 兴趣线//收盘表'
  • 每一行都是一个新表(while 循环中的echo '&lt;table&gt;)?表格 HTML 是否与问题中看到的不匹配?您可以修改演示以复制您遇到的问题吗?
  • 首先有
  • '.$date1.' - '.$date2.'
    column headings 在 html 中,而不是 ,然后是带有回显的 while 循环,用于 php 代码中的表行/单元格,然后 php 关闭并
    返回 html。我会尽快修改演示,仍然需要弄清楚如何在那里设置数据库!感谢您的耐心等待,我对 php、mysql 和 jscript 还比较陌生。
  • 在这里修改了我的问题,也许这会让我更深入地了解我做错了什么!谢谢
  • 我在更新中没有看到任何问题,但我不太了解php...只要您之前发布的HTML是结果,那么应该没问题。 javascript看起来不错。您是否在浏览器的控制台中看到任何错误(按 F12,然后按控制台选项卡)?你用的是什么版本的tablesorter?什么版本的jQuery?
猜你喜欢
相关资源
最近更新 更多
热门标签