Сортировать Строка Json Дата - PullRequest
0 голосов
/ 25 июня 2019

Я получаю такие значения даты: "/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 голосов
/ 25 июня 2019

Этот код должен сортировать код по возрастанию и убыванию и формат даты:

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>
0 голосов
/ 25 июня 2019

Используйте Array#map, чтобы преобразовать ваш массив строк в массив экземпляров моментальных моментов, затем отсортируйте его по 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>
0 голосов
/ 25 июня 2019

Вы должны быть осторожны с вашей переменной 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)
})

Поскольку ваша дата будет правильно упорядочена с использованием алфавитного порядка.

...