排序字符串Json日期

时间:2019-06-25 15:07:20

标签: javascript json date momentjs

我从一组对象中获取日期值:"/Date(1560458281000)/"。我只想按降序排列这些日期。我愿意接受任何使用纯JavaScript和/或moment.js的示例。顺便说一下,小时和分钟很重要。我将显示为2014/10/29 4:50

let dateSorted = this.props.myObj.sort(function(a,b) {
  sorted= new Date(Number(a.Date.replace(/\D/g, ''))) - new 
  Date(Number(b.Date.replace(/\D/g, '')))
  return sorted;
})

此代码无效。

3 个答案:

答案 0 :(得分:0)

您应该谨慎使用sorted变量,因为它缺少const / let初始化程序,我会这样写:

let dateSorted = this.props.differences.sort(function(a,b) {
  const timeA = Number(a.Date.replace(/\D/g, ''))
  const timeB = Number(b.Date.replace(/\D/g, ''))

  return timeA - timeB;
})

由于您的日期采用时间戳格式,因此您甚至无需将其转换为日期即可进行比较,因此可以直接减去数字。

一种更简单的方法是使用localeCompare

let dateSorted = this.props.differences.sort(function (a, b) {
  return a.Date.localeCompare(b.Date)
})

因为您的日期将通过使用字母顺序正确地排序。

答案 1 :(得分:0)

此代码应按从高到低的顺序对代码进行排序,并对日期进行格式化:

data = [{Date:"/Date(1560457284000)/"},{Date: "/Date(1560458274000)/"},{Date:"/Date(1560458192000)/"}]

sorted = data.sort(({Date:a}, {Date:b}) => +b.replace(/\D/g, '') - +a.replace(/\D/g, ''))

sorted = sorted.map(({Date}) => ({Date: moment(+Date.replace(/\D/g, '')).format('YYYY/MM/DD H:mm')}))
console.log(sorted)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

答案 2 :(得分:0)

使用Array#map将字符串数组转换为momentjs实例数组,然后使用Array#sort作为返回值的a - b对其进行排序(对于降序,则使用b - a进行排序)订单)。

dates.map(d => moment(+d.replace(/\D/g, ''))).sort((a, b) => a - b);

示例:

let dates = [
  '/Date(1560458281000)/',
  '/Date(1560454528989)/',
  '/Date(1560450204150)/',
  '/Date(1560458450489)/'
];

// Replaces.
dates = dates.map(d => moment(+d.replace(/\D/g, '')));

// Sorts in ascending order (return b - a for desc).
dates.sort((a, b) => a - b);

// "dates" is containing your sorted date in momentjs instances now.
console.log(dates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>