lodash-带有跳过年份值的订单日期

时间:2018-12-26 16:49:47

标签: javascript sorting momentjs lodash

var dates = ['2017-02-01', '2017-01-01', '2016-02-03', '2018-02-02', '2014-12-25'];
var orderedDates = dates.sort(); // ['2017-01-01', '2017-02-01', '2018-02-02', '2016-02-03', '2014-12-25']

我收集了不同年份的日期(瞬间对象)。我只需要按“ ddMM”格式(例如跳过年份)对日期进行排序。

有没有办法做到这一点?

创建dates数组的副本,为所有日期设置同一年-似乎不是一个好的解决方案。

使用lodash .orderBy

进行排序

2 个答案:

答案 0 :(得分:1)

您应该使用“ MMDD”格式,而不是“ DDMM”。

并且不必将其转换回片刻,因为它只是对数组进行排序。

var orderedDates = _.orderBy(dates, e => moment(e).format('MMDD'));

答案 1 :(得分:0)

您可以将orderBy与一系列指定所需顺序的函数一起使用(这些函数从date对象获得monthmoment):

const date = (s) => moment(s, 'YYYY-MM-DD');
const dates = [date('2017-02-01'), date('2017-01-01'), date('2016-02-03'), date('2018-02-02'), date('2014-12-25')];

const result = _.orderBy(dates, [m => m.date(), m => m.month()]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>