【问题标题】:Tablesorter - Dates ProblemTablesorter - 日期问题
【发布时间】:2023-03-13 11:07:01
【问题描述】:

我知道对此有一些问题,但我似乎无法解决我的问题。

我正在将 .csv 文件加载到 tablesorter 中,但我的列之一是日期(2009 年 12 月 23 日)。但它们排序为 12 月 2 日、12 月 23 日、12 月 3 日、12 月 31 日

有人知道解决办法吗? You can see the problem here,是底部的表格。提前非常感谢!

<script type="text/javascript" charset="utf-8">
  $(document).ready(function() 
      { 
          $("#tablesorter-demo2").tablesorter({ widgets: ['zebra'] });
      } 
  );
 </script>

-

表格宽度=“871”边框=“0” 细胞填充=“0” 细胞间距=“1” class="tablesorter" id="tablesorter-demo">

$row = 1;
$handle = fopen("csv/canadatransactions.csv",

"r"); 而 (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $行++;

                if ($row == 2)
               {
                   echo "<thead>\n<tr>\n";

                   echo "<th class=\"header\">" . $data[1] .

"\n"; // 姓名 回声“”。 $数据[0]。 "\n"; // 象征 回声“”。 $数据[2]。 "\n"; // 买卖 回声“”。 $数据[3]。 "\n"; // 日期 回声“”。 $数据[4]。 "\n"; // 分享 回声“”。 $数据[5]。 "\n"; // 价钱 回声“”。 $数据[6]。 "\n"; // 现金价值

                   echo "</tr>\n</thead>\n<tbody>";
               }

               else
               {
                   echo "<tr class=\"even\"";
                   echo ">\n";
                   echo "<td>" . $data[1] . "</td>\n";
    echo "<td>" . $data[0] . "</td>\n";
    echo "<td>" . $data[2] . "</td>\n";
    echo "<td>" . $data[3] . "</td>\n";
    echo "<td>" . $data[4] . "</td>\n";
    echo "<td>C$ " . $data[5] . "</td>\n";
    echo "<td>C$ " . $data[6] . "</td>\n";

                   $transactions = $row - 3;
 }
}
fclose($handle);
?>
            </tbody>
</table>

【问题讨论】:

    标签: jquery tablesorter


    【解决方案1】:

    它基于字母数字 (ASCII) 值排序,而不是基于日期值(它也会将 11 月放在 10 月之前)。您需要 jquery 将每个单元格解释为日期值,然后对它们进行相应的排序。如果他们的内置类型检测不起作用,您必须强制数据类型。请参阅http://www.terminally-incoherent.com/blog/2008/09/29/jquery-tablesorter-list-of-builtin-parserssorters/ 了解更多信息。

    【讨论】:

    • 效果很好。我喜欢我可以手动控制列的事实。非常感谢!
    【解决方案2】:

    您应该指定列的类型。否则它将被排序为文本。您可以通过指定sorter 参数来做到这一点:

    <table>
    <thead>
        <tr>
            <th>Id</th>
            ... other columns ....
            <th class="{sorter: 'isoDate'}">Date</th>
    </tr>           
    </thead>
    <tbody>
    ... table body ....
    

    虽然我不确定isoDate 是否是您应该使用的分拣机,但tablesorter 还有另外两个分拣机:usLongDateshortDate。您可以尝试其中哪一个可以完成这项工作。

    【讨论】:

      【解决方案3】:

      如果默认日期排序选项都不起作用,请尝试使用 custom parser 并将日期转换为等效的毫秒表示以进行排序。

      $.tablesorter.addParser({ 
          // set a unique id 
          id: 'dateMS', 
          is: function(s) { 
              // return false so this parser is not auto detected 
              return false; 
          }, 
          format: function(s) { 
              var d = Date.parse(s);
              if (isNaN(d)) {
                 return -1;
              }
              return d;
          }, 
          // set type, either numeric or text 
          type: 'numeric' 
      });     
      
      $(function() { 
          $("table").tablesorter({ 
              headers: { 
                  6: { 
                      sorter:'dateMS' 
                  } 
              } 
          }); 
      }); 
      

      【讨论】:

      • 谢谢!但是从 tablesorter 禁用内部自动检测也可以解决问题。他正在以文本的形式读取我的数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多