Сравнение даты и времени на Js

Svileff

Новичок
Приветствую всех. Столкнулся с такой проблемой сегодня. В определенный промежуток времени у меня выводится элементы на экран. Но проблема возникла в переходе с одного месяца на другой. (31.01.2022 сравнивается с 01.02.2022 и т.д.) Вывод не получается так как он не понимает что месяц меняется.
JavaScript:
// ${date} - это день который выбрали
let newDate = new Date().toLocaleString(),
    timeDataNew = newDate.toLocaleString(),
    d =  `${date}, 09:00:00` > timeDataNew ||  `${date}, 13:00:00` >= timeDataNew,
    d2 = `${date}, 13:00:00` > timeDataNew ||  `${date}, 17:00:00` >= timeDataNew,
    d3 = `${date}, 17:00:00` > timeDataNew ||  `${date}, 21:00:00` >= timeDataNew;
if(d){
    //Выводит элемент
}
if(d2){
    //Выводит элемент
}
if(d3){
    //Выводит элемент
}

Подскажите может в другом формате преобразовать дату и время. И можно пример.
 
Почему вы сравниваете строки, а не время?
 
Я JS плохо знаю, еще изучаю. Для меня такой способ показался удобным. Просто я пока не понял как можно к дате подставлять указанное время. И чтобы это было не сильно нагружено.
 
 
JavaScript:
// ${date} - это день который выбрали формат: 31.01.2022
let newDate = new Date().toLocaleString(),
    timeDataNew = newDate.toLocaleString(),
    theBigDay = new Date(date);
if(theBigDay.setHours(9) > timeDataNew.setHours() ||  theBigDay.setHours(13) >= timeDataNew.setHours()){
    //Выводит элемент
}
Я правильно Вас понял?
 
Последнее редактирование:
Там 4 параметра, если ты что-то не установишь, то возьмётся текущее значение. И не забывай про локаль и таймзоны.
Перечитать всю доку по Date займёт минут 10, не надо гадать.
 
Что-то по коду нифига не понятно, что нужно сделать.
Пока складывается такое. Есть дата date, которая содержит строковое обозначение некой даты в локальном дата-время ( 01.02.2022 )
Нужно проверить, что текущее время попадает в интервалы 9-13 часов этой даты (событие d), 13-17 - d2, 17-21 - d2. Так ?
Можно из текущей даты выковырять значение даты и сравнить с date, если сравнение прошло - достать часы и сравнить с интервалами
Что-то типа такого
JavaScript:
let date='02.02.2022'; // это пришло свыше
let now=new Date(),
        localdate=now.toLocaleDateString('ru-RU'),
        localtime=now.toLocaleTimeString('ru-RU');
if(localdate>=date){
  if(localdate>date || localtime>'09:00'){
      console.log('выводим блок 9:00');
  };
  if(localdate>date || localtime>'13:00'){
      console.log('выводим блок 13:00');
  }
  if(localdate>date || localtime>'17:00'){
      console.log('выводим блок 17:00');
  }
}

console.log(localdate,localtime, date); // это для контроля входящих параметров, мало ли что
 
Последнее редактирование:
Что-то по коду нифига не понятно, что нужно сделать.
Пока складывается такое. Есть дата date, которая содержит строковое обозначение некой даты в локальном дата-время ( 01.02.2022 )
Нужно проверить, что текущее время попадает в интервалы 9-13 часов этой даты (событие d), 13-17 - d2, 17-21 - d2. Так ?
Можно из текущей даты выковырять значение даты и сравнить с date, если сравнение прошло - достать часы и сравнить с интервалами
Что-то типа такого
JavaScript:
let date='02.02.2022'; // это пришло свыше
let now=new Date(),
        localdate=now.toLocaleDateString('ru-RU'),
        localtime=now.toLocaleTimeString('ru-RU');
if(localdate===date){
  if(localtime>'09:00' && localtime<='13:00'){
      console.log('d');
  };
  if(localtime>'13:00' && localtime<='17:00'){
      console.log('d2');
  }
  if(localtime>'17:00' && localtime<='21:00'){
      console.log('d3');
  }
}

console.log(localdate,localtime, date); // это для контроля входящих параметров, мало ли что
Вы все правильно поняли. По сути каждый день проверяется на текущее время. При выборе даты которая еще будит он отображает все позиции. А тот день который уже настал проверяется по времени. И если время прошло то скрывает элементы один за другим. Я поставил ваш код. Проверка проходит только по одному дню (текущему). Те дни которые еще будут по ним нечего не происходит (элементы не выводит).
 
Поменял свой код. Так больше похоже на то, что должно происходить ?
 
Вроде, примерно понял, что там должно происходить. Пользоваться локализованными датами и временем довольно сложно. Например если у вас посетитель из солнечной Бразилии, то для него время 17:00 имеет совсем даже другой смысл, чем для посетителя из соседней комнаты. Так что время начала акции, по уму, должно бы быть одинаковым для всех посетителей сайта, независимо от таймзоны.
Для этого нужна дата в GMT виде.
Еще можно вспомнить про вопрос
Почему вы сравниваете строки, а не время?
Итого получится что-то такое
JavaScript:
var date='3.2.2022';

function time2gmt(time){
    return new Date(date+', '+time+' GMT+3' );
}
let now= new Date();
if(now>time2gmt('9:00')){
    console.log('// выводим D');
}
if(now>time2gmt('13:00')){
    console.log('// выводим d2');
}
if(now>time2gmt('17:00')){
    console.log('// выводим d3');
}
 
Никого не смущает, что какие-то сравнения с клиентским временем происходят? А если у клиента что попало установлено?
 
Никого не смущает, что какие-то сравнения с клиентским временем происходят? А если у клиента что попало установлено?
Сейчас все так завязано, что если время не верное, браузер отказывается работать.
Во прикол =))))
Максимум, что можно сделать, это смену часового пояса.
Если опустить ниже, перестает работать, что либо вообще =)))
Ну по крайне мере у меня так.
Винда 11, пробовал мозилу, оперу, хром.
 
По сути у меня код отрабатывает как надо. Но эта сравнение строк. А можно перевести дату и указанное время в цифры? Аналог idate() или strtotime() на php. И уже их сравнить.
 
Последнее редактирование:
По сути у меня код отрабатывает как надо. Но эта сравнение строк. А можно перевести дату и указанное время в цифры? Аналог idate() или strtotime() на php. И уже их сравнить.
Чтобы не было вот таких проблем, нужно хранить временную метку, а не строку.
И об этом вам еще выше говорили.
Либо вы прислушиваетесь, либо мучайтесь дальше =)
 
Сверху