Переменная не преобразуется в Дату

Рейтинг: 0Ответов: 1Опубликовано: 27.02.2023

Суть скрипта получить текущую дату и время, и сравнить с датой и временем из блока.

const now = new Date();
$('.list-item').each(function() {
  const dateStr = $(this).find('.date').text().trim();
  if (dateStr) {
    const date = new Date(dateStr);
    console.log(date);
    if (date > now) {
      $(this).find('.test').text('Будущее');
    } else {
      $(this).find('.test').text('Прошлое');
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="list-item">
  <div class="date">28.02.2023 13:40:00</div>
  <div class="test"></div>
  <div class="item  ">
  </div>
</div>

Всегда выполняется else, пытаюсь вывести переменную в консоль console.log(date); Выдает "Invalid Date" Подскажите, в чем может быть проблема?

Ответы

▲ 2Принят

Подскажите, в чем может быть проблема?

Не всякий формат строки можно преобразовать в дату... https://learn.javascript.ru/date#razbor-stroki-s-datoy

Перед преобразованием переделаем строку под другой формат YYYY-MM-DDTHH:mm:ss.sssZ.

const now = new Date();
$('.list-item').each(function() {
  const dateStr = $(this).find('.date').text().trim();
  if (dateStr) {
    let date = dateStr.replace(/(\d+)\.(\d+)\.(\d+)\s/, '$3-$2-$1T');
    date = new Date(date);
    console.log(date, typeof date);
    if (date > now) {
      $(this).find('.test').text('Будущее');
    } else {
      $(this).find('.test').text('Прошлое');
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="list-item">
  <div class="date">28.02.2023 13:40:00</div>
  <div class="test"></div>
  <div class="item  ">
  </div>
</div>