日期看起来像这样:
[‘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
一月应该是第一位。
答案 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时代以来以毫秒表示的日期