Member 14013562 Ответов: 1

Как реверсировать массив дат


У меня есть массив дат следующим образом:
["09/23/2019", "08/23/2019", "07/23/2019", "06/23/2019", "05/23/2019", "04/23/2019", "03/23/2019", "02/23/2019", "01/23/2019", "12/23/2018"]


Мне нужно изменить его и начать с 23.12.2018 года.

Я пытался
dates.reverse
но это полностью портит формат и выводит несортированную дату. Также пробовать
dates.sort()
и он сортирует даты с 01/2019 по 09/2019 и печатает 12/2018 в самом конце.

Что я уже пробовал:

stDate = 11/20/2018
etDate = 09/19/2019
 var Endnow = etDate.clone();
        var Endday = etDate.date();

 while(Endnow.isAfter(stDate)) {
                    var month = Endnow.clone().endOf("month");
                    if (Endnow.date() < Endday && Endday <= month.date()) {
                        Endnow.date(Endday);
                    }
                    dates.push(Endnow.format("MM/DD/YYYY"));
dates.reverse();
dates.sort();
                    Endnow = Endnow.clone().subtract({"months": 1});
                }

Daniel Pfeffer

Я не понимаю, почему dates.reverse() не дает вам того, что вы хотите. Он меняет порядок элементов массива, не заботясь о том, каковы их значения. Массив в порядке возрастания станет массивом в порядке убывания.
Если Ваш массив не в порядке, вам придется написать пользовательскую функцию сортировки. Как вы уже обнаружили, даты в американском формате не могут быть отсортированы так, как если бы они были строками.

1 Ответов

Рейтинг:
12

CPallini

function datecomp( d1, d2 )
{
  var a1 = d1.split("/");
  var a2 = d2.split("/");
  a1 = a1[2] + a1[0] + a1[1];
  a2 = a2[2] + a2[0] + a2[1];
  return (parseInt(a1) - parseInt(a2));
}

dates.sort(datecomp);


Member 14013562

Отлично работает. Большое вам спасибо.

CPallini

Добро пожаловать.