簡體   English   中英

JavaScript 如何按最近的日期排序

[英]JavaScript how to sort date by most recent first

我正在嘗試對從 API 收到的 JSON 個對象進行排序,以便首先顯示最近的日期時間。 但我目前的做法是將 2022 年 12 月排序為比 2023 年 1 月更近的日期。

這是我目前正在使用的:

 result = [ { "date": "21/12/2022", "time": "10:41:10", }, { "date": "20/12/2022", "time": "12:42:21", }, { "date": "15/12/2022", "time": "09:26:02", }, { "date": "14/12/2022", "time": "10:20:54", }, { "date": "09/01/2023", "time": "18:58:17", }, { "date": "09/01/2023", "time": "18:57:34", }, { "date": "08/01/2023", "time": "12:12:38", }] if (result.length > 1) { result.sort((a, b) => { const dateTime1 = new Date(a.date + a.time); const dateTime2 = new Date(b.date + b.time); return dateTime2 - dateTime1; }); console.log(result); };

這給了我:

{date: "21/12/2022", time: "10:41:10...}
{date: "20/12/2022", time: "12:42:21...}
{date: "15/12/2022", time: "09:26:02...}
{date: "14/12/2022", time: "10:20:54...}
{date: "09/01/2023", time: "18:58:17...}
{date: "09/01/2023", time: "18:57:34...}
{date: "08/01/2023", time: "12:12:38...}

我如何以一種它認為 2022 年不比 2023 年更近的方式對其進行排序?

您的代碼的問題是日期創建。

您可以使用以下代碼片段創建日期,因為日期構造函數不接受 DD/MM/YYYY。

const createDate = (d, t) => {
  const [date, month, year] = d.split('/')
  const [hours, mins, secs] = t.split(':')
  return new Date(year, month - 1, date, hours, mins, secs)
}

此外, a.date + a.time不正確。 你正在連接兩者但沒有空間。 因此以下將是 output:

日期:“21/12/2022”
時間:“10:41:10”
Output:“21/12/202210:41:10”

以下是一個工作示例

 result = [{ "date": "21/12/2022", "time": "10:41:10", }, { "date": "20/12/2022", "time": "12:42:21", }, { "date": "15/12/2022", "time": "09:26:02", }, { "date": "14/12/2022", "time": "10:20:54", }, { "date": "09/01/2023", "time": "18:58:17", }, { "date": "09/01/2023", "time": "18:57:34", }, { "date": "08/01/2023", "time": "12:12:38", } ] const createDate = (d, t) => { const [date, month, year] = d.split('/') const [hours, mins, secs] = t.split(':') return new Date(year, month - 1, date, hours, mins, secs) } if (result.length > 1) { result.sort((a, b) => { const dateTime1 = createDate(a.date, a.time); const dateTime2 = createDate(b.date, b.time); return dateTime2 - dateTime1; }); console.log(result); };


正如@RobG所正確提到的

那應該是新的日期(年,月 - 1,日期,小時,分鍾,秒),但對於排序來說,如果所有月份都為 +1 則無關緊要。

您可以將datetime轉換為YYYY-MM-DD HH:MM:SS格式,然后按字典順序對其進行排序。

 const arr = [ { "date": "21/12/2022", "time": "10:41:10", }, { "date": "20/12/2022", "time": "12:42:21", }, { "date": "15/12/2022", "time": "09:26:02", }, { "date": "14/12/2022", "time": "10:20:54", }, { "date": "09/01/2023", "time": "18:58:17", }, { "date": "09/01/2023","time": "18:57:34", }, { "date": "08/01/2023", "time": "12:12:38", }], sorted = arr.map(o => [o, o.date.split('/').reverse().join('-') + '_' + o.time]).sort((a, b) => b[1].localeCompare(a[1])).map(([o]) => o); console.log(sorted);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM