【问题标题】:Date sort javascript日期排序javascript
【发布时间】:2017-04-25 18:33:12
【问题描述】:

我有这个代码:

<script type="text/javascript">
    function abc(objarray) {  
    objarray = objarray.sort(function (a, b) { return new Date(a).getTime() - new Date(b).getTime() });
    alert(objarray);
}
objarray = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"];
abc(objarray);
</script>

日期时间格式:dd.MM.yyyy HH:MM

我想排序,以便我可以先获得最新日期,但它不起作用。

【问题讨论】:

  • 您在new Date(a).getTime() 上有Invalid Date。您需要在比较日期之前解析
  • 您传递的日期字符串无效。表示日期的字符串值。该字符串应采用 Date.parse() 方法可识别的格式(符合 IETF 的 RFC 2822 时间戳,也是 ISO8601 的一个版本)。

标签: javascript arrays sorting date


【解决方案1】:

你需要切换ab并取另一个字符串进行比较,比如

1993-08-16 11:13

ISO 6801 数据和时间格式,与 String#localeCompare 相当。

function abc(objarray) {
    objarray = objarray.sort(function(a, b) {
        function getISO(s) {
            return s.replace(/(..).(..).(....) (.....)/, '$3-$2-$1 $4');
        }
        return getISO(b).localeCompare(getISO(a));
    });
}

var objarray = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"];
abc(objarray);

console.log(objarray);

【讨论】:

    【解决方案2】:

    试试这个:

    String.prototype.getCorrectDate = function () {
        var date = this.split(' ')[0];
        var hours = this.split(' ')[1];
    
        var dateSplitted = date.split('.');
        return new Date(dateSplitted[2] + '.' + dateSplitted[1] + '.' + dateSplitted[0] + ' ' + hours);
    };
    
    var dates = ["16.08.1993 11:13", "16.08.1994 11:12", "13.08.1994 11:12", "13.08.1996 10:12", "08.08.1996 10:12"];
    
    var sorted = dates.sort(function(a, b) {
        return b.getCorrectDate() - a.getCorrectDate();    
    });
    
    alert('First from sorted: '+ sorted[0]);
    alert('Last from sorted: '+ sorted[sorted.length - 1]);
    

    https://jsfiddle.net/Lcq6wqhb/

    Javascript 的原生方法sort 用于对数组进行排序,我们可以传递回调函数,比如sorting behavior(Sorting an array of JavaScript objects)。 但在排序之前,我们需要将date 字符串转换为正确的格式,以接受new Date(dateString) 作为参数,否则会给出错误Invalid Date。 我正在使用getCorrectDate 方法将dd.mm.yyyy hh:MM 转换为yyyy.mm.dd HH:MM

    【讨论】:

    • 请添加一些解释,说明此代码为何/如何帮助 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅this Meta question and its answers 了解更多信息。
    • 如果您要解析字符串以生成日期,请将部分直接传递给日期构造函数(例如return new Date(dateSplitted[2], dateSplitted[1]-1, ...)),不要为内置解析器创建另一个字符串解析,尤其是至少在某些浏览器中已知会失败的解析(请参阅Why does Date.parse give incorrect results?
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多