📜  javascript 按日期排序数组 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:43.514000             🧑  作者: Mango

JavaScript按日期排序数组

在很多情况下,我们需要对日期进行排序。在JavaScript中,我们可以使用Array.sort()函数来对数组进行排序。不过,由于日期格式的不同,比较和排序日期要比其他类型的数据复杂一些。

日期格式化

在进行日期排序之前,我们需要先将日期按特定格式化为字符串。JavaScript中,我们可以使用Date.toLocaleDateString()函数来将日期转换为本地格式的日期字符串。该函数接收参数,包括日期格式、语言等。

const date = new Date();
const formattedDate = date.toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'});
// 输出格式:"MM/DD/YYYY"
console.log(formattedDate);
排序日期数组

一旦我们将日期格式化为相同格式的字符串,我们可以对包含这些字符串的数组进行排序。JavaScript中,我们可以使用Array.sort()函数来对数组排序。不过,要注意的是,直接使用该函数对日期数组进行排序,得到的结果可能不是我们想要的。

const dates = [
  new Date('2022-12-01'),
  new Date('2022-01-01'),
  new Date('2022-06-01'),
  new Date('2023-01-01')
];

dates.sort();
console.log(dates);

输出结果:

[
  Fri Jan 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Thu Dec 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Sun Jan 01 2023 00:00:00 GMT+0800 (中国标准时间)
]

可以看到,使用Array.sort()对日期数组进行排序,得到的结果并不是按照日期顺序排列的。这是因为Array.sort()默认会按照字典序比较字符串,并非日期。

因此,在排序日期数组之前,我们需要先将日期格式化为字符串,然后将字符串作为数组元素来排序。

const dates = [
  new Date('2022-12-01'),
  new Date('2022-01-01'),
  new Date('2022-06-01'),
  new Date('2023-01-01')
];

const formattedDates = dates.map(date => date.toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}));
formattedDates.sort();
console.log(formattedDates);

输出结果:

[
  "01/01/2022",
  "06/01/2022",
  "12/01/2022",
  "01/01/2023"
]

可以看到,现在我们得到了按照日期顺序排列的字符串数组。如果需要,我们还可以将字符串数组转换为日期数组。

const sortedDates = formattedDates.map(date => new Date(date));
console.log(sortedDates);

输出结果:

[
  Fri Jan 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Wed Jun 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Thu Dec 01 2022 00:00:00 GMT+0800 (中国标准时间),
  Sun Jan 01 2023 00:00:00 GMT+0800 (中国标准时间)
]

这样,我们就完成了按照日期排序数组的操作。

总结

在JavaScript中,按照日期排序数组需要注意日期格式的不同。我们可以将日期先格式化为字符串,再将字符串作为数组元素排序。如果需要,还可以将字符串数组转换为日期数组。