【问题标题】:How to use javascript sort() to order by year, month, day?如何使用javascript sort() 按年、月、日排序?
【发布时间】:2021-09-09 03:44:03
【问题描述】:

我有一系列从数组中提取的日期字符串。我正在尝试按年(desc)、月(desc)和日(desc)排序。我已经弄清楚了年份部分,但我无法确定月份和日期。

const dates = [
  {
    date: "September 4, 2009"
  },
  {
    date: "July 1, 2009"
  },
  {
    date: "March 25, 2009"
  },
  {
    date: "July 8, 2008"
  },
  {
    date: "May 2, 2008"
  },
  {
    date: "November 2, 2008"
  },  

  {
    date: "June 9, 2021"
  },

  {
    date: "August 29, 2007"
  },

  {
    date: "March 19, 2006"
  },

  {
    date: "June 22, 2021"
  },

  {
    date: "May 19, 2021"
  }
];

dates.sort(function (a, b) {
  if (a.date.substr(-4) > b.date.substr(-4)) {
    return -1;
  }
  if (a.date.substr(-4) < b.date.substr(-4)) {
    return 1;
  }
  return 0;
});

function datesTemplate(d) {
  return `
    <div class="card">
      <h3>${d.date}</h3>
    </div>
  `;
}

document.getElementById("dateList").innerHTML = `${dates
  .map(datesTemplate)
  .join("")}`;
.card {
  padding: 5px 10px;
  border: 1px solid black;
  margin: 1em;
}
&lt;div class="container" id="dateList"&gt;&lt;/div&gt;

【问题讨论】:

    标签: javascript date sorting


    【解决方案1】:

    使用Date.parse() 将日期转换为时间戳,然后按此排序。

    const dates = [
      {
        date: "September 4, 2009"
      },
      {
        date: "July 1, 2009"
      },
      {
        date: "March 25, 2009"
      },
      {
        date: "July 8, 2008"
      },
      {
        date: "May 2, 2008"
      },
      {
        date: "November 2, 2008"
      },  
    
      {
        date: "June 9, 2021"
      },
    
      {
        date: "August 29, 2007"
      },
    
      {
        date: "March 19, 2006"
      },
    
      {
        date: "June 22, 2021"
      },
    
      {
        date: "May 19, 2021"
      }
    ];
    
    console.log(dates.sort((a, b) => Date.parse(a.date) - Date.parse(b.date)));

    如果您可以控制数据源,最好使用标准日期格式,例如 iso8601:2009-08-04。 iso8601 有一个额外的好处(除了标准化),它可以作为字符串排序。

    【讨论】:

      【解决方案2】:

      这将解析日期,比较函数解析日期并按降序排序

      dates.sort((a,b ) => new Date(b.date) - new Date(a.date))
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多