дата форматирования без назначения новых данных из строки

#javascript #jquery #angular #typescript #date

#javascript #jquery #angular #typescript #Дата

Вопрос:

У меня есть таблица, как показано ниже:

 ID    DateColumn

1     3/7/2019 5:29:38 AM
2     3/8/2019 5:28:38 AM
3     3/7/2019 5:30:38 AM
4     3/7/2019 5:31:38 AM
  

Текущий столбец даты обрабатывается как строка в объекте json при привязке к сетке.
Мне нужно отсортировать этот объект json на основе даты. Следовательно, мне нужно преобразовать строку в дату.

Я попытался написать код, как показано ниже :

 getServiceResults() {

    this.serviceCheckService.getResults(Appconfig.PageSize, Appconfig.PageNo).takeUntil(this.ngUnsubscribe).subscribe((data) => {

    this.resultData = data; 
            this.resultData.forEach(x => x.DateColumn = x.datecolumn.replace(new Date(x.DateColumn))); 

      });
  }
  

но приведенный выше код выдает синтаксическую ошибку, как мне преобразовать каждое значение в столбце даты из строки в дату, затем, как мне отсортировать этот столбец?

Комментарии:

1. вы столкнулись с какой-либо ошибкой? вы проверили с помощью console.log?

2. да, весь экран становится белым

3. в консоли отображается синтаксическая ошибка

4. какие ошибки консоли появляются. можете ли вы опубликовать здесь?

5. есть ли лучший способ выполнить это преобразование и сортировку?

Ответ №1:

Попробуйте эту строку. нет необходимости использовать метод replace.

 this.resultData.forEach(x => x.DateColumn = new Date(x.DateColumn)); 
  

Для сортировки данных вы можете использовать приведенный ниже код:

 resultData.sort((item1, item2) => { if(new Date(item1) < new Date(item2)) {return 1} else return -1;} )
  

Комментарии:

1. как я должен сортировать?

2. Отредактировал мой ответ для сортировки. пожалуйста, проверьте

3. спасибо, это сработало, не могли бы вы, пожалуйста, дать мне знать, как фильтровать до определенной даты?

4. Он фильтрует другие поля, но поле даты не фильтрует _this. downloadData.filter(x=>x.LogTime=== ‘3/11/2019 7:29:32 AM’)

Ответ №2:

Ваш формат даты американский (ММ / ДД / ГГГГ), поэтому вы можете передать его непосредственно в конструкторе. (Это ужасный формат, потому что половина мира использует DD / MM, и вы не всегда можете определить, глядя. Вы не можете отправить это как ISO?)

Как только у вас будет массив объектов, у каждого из которых есть свойство date, сделайте это…

 myArray.sort((a,b) => a.dateColumn.getTime() - b.dateColumn.getTime())
  

Комментарии:

1. спасибо, это сработало, не могли бы вы, пожалуйста, сообщить мне, как фильтровать до определенной даты?

2.Он фильтрует другие поля, но поле даты не фильтрует _this.downloadData.filter(x=>x.LogTime=== ‘3/11/2019 7:29:32 AM’)

Ответ №3:

Ожидая, что формат даты находится в MM/DD/YYYY вы можете преобразовать весь строковый формат даты в Date тип, а затем выполнить сортировку.

 // Convert string date to Date type
this.resultData.forEach(_d => _d.DateColumn = new Date(_d.DateColumn));

// Sort column based on date
this.resultData.sort((a, b) => a.DateColumn.getTime() < b.DateColumn.getTime() ? 1 : -1);
  

Комментарии:

1. спасибо, это сработало, не могли бы вы, пожалуйста, сообщить мне, как фильтровать до определенной даты?

2.Он фильтрует другие поля, но поле даты не фильтрует _this.downloadData.filter(x=>x.LogTime=== ‘3/11/2019 7:29:32 AM’)