当前位置: 首页 > 知识库问答 >
问题:

订购日期时间ASC/DESC

郏稳
2023-03-14

我有一张日期表

<table>
    <tr>
      <th>Date</th>
    </tr>
    <tr>
      <td>01/03/2018 02:31 AM</td>
    </tr>
    <tr>
      <td>01/13/2018 03:00 AM</td>
    </tr>
    <tr>
       <td>09/02/2017 02:31 AM</td>
    </tr>
    <tr>
       <td>11/29/2017 09:30 PM</td>
    </tr>
    <tr>
      <td>03/01/2018 03:00 AM</td>
    </tr>
</table>

我想按时间顺序点菜。我发现另一个线程推荐使用:

$('th').click(function(){
    var table = $(this).parents('table').eq(0)
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
    this.asc = !this.asc
    if (!this.asc){rows = rows.reverse()}
    for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index)
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
    }
}
function getCellValue(row, index){ return $(row).children('td').eq(index).html() }

但输出不能正确地将最新的排序为最旧的。

Date
01/03/2018 02:31 AM
01/13/2018 03:00 AM
03/01/2018 03:00 AM
09/02/2017 02:31 AM
11/29/2017 09:30 PM

共有1个答案

杜砚
2023-03-14

这里的问题是必须将单元格值解析为日期格式。稍后,您需要将其重新格式化为区域设置字符串toLocaleString,以便可以使用LocaleCompare函数

第一个变化:

var valA = getCellValue(a, index), valB = getCellValue(b, index)

致:

var valA = Date.parse(getCellValue(a, index)).toLocaleString(), valB = Date.parse(getCellValue(b, index)).toLocaleString();
$('th').click(function(){
    var table = $(this).parents('table').eq(0)
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))

    this.asc = !this.asc
    if (this.asc){rows = rows.reverse()}
    for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
    return function(a, b) {
        var valA = Date.parse(getCellValue(a, index)).toLocaleString(), valB = Date.parse(getCellValue(b, index)).toLocaleString();
        //console.log(valA, valB, "____", valA.localeCompare(valB),"_____",valA>valB);
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
    }
}
function getCellValue(row, index){
    return $(row).children('td').eq(index).html();
}
th {
    cursor: pointer;
    background: lightgrey;
}
td, th {
    padding: 5px 15px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr>
      <th>Date</th>
    </tr>
    <tr>
      <td>01/03/2018 02:31 AM</td>
    </tr>
    <tr>
      <td>01/13/2018 03:00 AM</td>
    </tr>
    <tr>
       <td>09/02/2017 02:31 AM</td>
    </tr>
    <tr>
       <td>11/29/2017 09:30 PM</td>
    </tr>
    <tr>
      <td>03/01/2018 03:00 AM</td>
    </tr>
</table>
 类似资料:
  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将

  • 介绍 日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象如下: 日期时间工具 DateUtil 针对日期时间操作提供一系列静态方法 DateTime 提供类似于Joda-Time中日期时间对象的封装,继承自Date类,并提供更加丰富的对象方法。 FastDateFormat 提供线程安全的针对Date对象的格式化和日期字符串解析支持。此对象在实际使

  • 主要内容:时间字符串,修饰符(Modifier),格式化,实例SQLite 支持以下五个日期和时间函数: 序号 函数 实例 1 date(timestring, modifier, modifier, ...) 以 YYYY-MM-DD 格式返回日期。 2 time(timestring, modifier, modifier, ...) 以 HH:MM:SS 格式返回时间。 3 datetime(timestring, modifier, modifier

  • 日期/时间操作符 下表演示了基本算术操作符的行为(+,*, 等): 操作符 例子 结果 + date '2001-09-28' + integer '7' date '2001-10-05' + date '2001-09-28' + interval '1 hour' timestamp '2001-09-28 01:00:00' + date '2001-09-28' + time '03:0

  • 主要内容:当前时间和日期,实例,实例,格林威治时间 (GMT),实例,格式化日期和时间,实例,新纪元时间(Epoch Time),实例,实例,POSIX 函数 strftime(),实例本章节我们为大家介绍 Perl 语言对时间日期的处理。 Perl中处理时间的函数有如下几种: 1、time() 函数:返回从1970年1月1日起累计的秒数 2、localtime() 函数:获取本地时区时间 3、gmtime() 函数: 获取格林威治时间 当前时间和日期 接下来让我们看下 localtime()