日期的JavaScript降序排列

时间:2019-03-03 20:10:41

标签: javascript function sorting

日期看起来像这样:

[‘Oct 7, 2009’, ‘Nov 10, 2009’, ‘Jan 10, 2009’, ‘Oct 22, 2009’, …]

月份始终是完整月份名称的前三个字符(“一月” =>“一月”,“二月” =>“二月”等)。

日期是一个或两个数字(1、2,…31),并且前面没有零。

一天后总是有一个逗号。年份始终是四位数。

我正在尝试编写一个函数,该函数将按日期降序对字符串列表进行排序

这是我目前拥有的:

let dates = [
'Oct 7, 2009',
'Nov 10, 2009',
'Jan 10, 2009',
'Oct 22, 2009'
]

let sortDate = function (date1, date2) {
  if (date1 > date2) return -1
  if (date1 < date2) return 1
  return 0
}

dates.sort(sortDate)

for (let i = 0; i < dates.length; i++) {
  document.write(i + ': ' + dates[i])
}

输出显示如下:

0: Oct 7, 2009
1: Oct 22, 2009
2: Nov 10, 2009
3: Jan 10, 2009

一月应该是第一位。

2 个答案:

答案 0 :(得分:2)

在您的sort回调中,返回以纪元表示的日期差(毫秒数)。您可以为此使用Date.parse

    return Date.parse(date1) - Date.parse(date2);

let dates = ['Oct 7, 2009', 'Nov 10, 2009', 'Jan 10, 2009', 'Oct 22, 2009'];

let sortDate = function (date1, date2) {
  return Date.parse(date1) - Date.parse(date2);
}

dates.sort(sortDate)

for (let i = 0; i < dates.length; i++) {
  console.log(i + ': ' + dates[i])
}

答案 1 :(得分:1)

您正在按字母数字顺序而不是按日期顺序排序,因为您正在比较字符串。您需要在排序之前将这些字符串转换为Date

data class MyClass(val id: Int) {
    object INVALID: MyClass {
    }
}

其中dates.map(date => { arr = date.match(/([a-zA-Z]{3}) ([0-9]{1,2}), ([0-9]{4})/); return new Date(arr[3], months.indexOf(arr[1]), arr[2]); }); 是日期数组,而dates是月份的有序数组。

然后在比较函数中比较months,它是自Unix时代以来以毫秒表示的日期