Сравнение даты и времени на 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){
    //Выводит элемент
}
Подскажите может в другом формате преобразовать дату и время. И можно пример.
 

AmdY

Пью пиво
Команда форума
Почему вы сравниваете строки, а не время?
 

Svileff

Новичок
Я JS плохо знаю, еще изучаю. Для меня такой способ показался удобным. Просто я пока не понял как можно к дате подставлять указанное время. И чтобы это было не сильно нагружено.
 

AmdY

Пью пиво
Команда форума
 

Svileff

Новичок
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()){
    //Выводит элемент
}
Я правильно Вас понял?
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
Там 4 параметра, если ты что-то не установишь, то возьмётся текущее значение. И не забывай про локаль и таймзоны.
Перечитать всю доку по Date займёт минут 10, не надо гадать.
 

ksnk

прохожий
Что-то по коду нифига не понятно, что нужно сделать.
Пока складывается такое. Есть дата 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); // это для контроля входящих параметров, мало ли что
 
Последнее редактирование:

Svileff

Новичок
Что-то по коду нифига не понятно, что нужно сделать.
Пока складывается такое. Есть дата 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); // это для контроля входящих параметров, мало ли что
Вы все правильно поняли. По сути каждый день проверяется на текущее время. При выборе даты которая еще будит он отображает все позиции. А тот день который уже настал проверяется по времени. И если время прошло то скрывает элементы один за другим. Я поставил ваш код. Проверка проходит только по одному дню (текущему). Те дни которые еще будут по ним нечего не происходит (элементы не выводит).
 

ksnk

прохожий
Поменял свой код. Так больше похоже на то, что должно происходить ?
 

ksnk

прохожий
Вроде, примерно понял, что там должно происходить. Пользоваться локализованными датами и временем довольно сложно. Например если у вас посетитель из солнечной Бразилии, то для него время 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');
}
 

weregod

unserializer
Никого не смущает, что какие-то сравнения с клиентским временем происходят? А если у клиента что попало установлено?
 

Squats

Новичок
Никого не смущает, что какие-то сравнения с клиентским временем происходят? А если у клиента что попало установлено?
Сейчас все так завязано, что если время не верное, браузер отказывается работать.
Во прикол =))))
Максимум, что можно сделать, это смену часового пояса.
Если опустить ниже, перестает работать, что либо вообще =)))
Ну по крайне мере у меня так.
Винда 11, пробовал мозилу, оперу, хром.
 

Svileff

Новичок
По сути у меня код отрабатывает как надо. Но эта сравнение строк. А можно перевести дату и указанное время в цифры? Аналог idate() или strtotime() на php. И уже их сравнить.
 
Последнее редактирование:

Squats

Новичок
По сути у меня код отрабатывает как надо. Но эта сравнение строк. А можно перевести дату и указанное время в цифры? Аналог idate() или strtotime() на php. И уже их сравнить.
Чтобы не было вот таких проблем, нужно хранить временную метку, а не строку.
И об этом вам еще выше говорили.
Либо вы прислушиваетесь, либо мучайтесь дальше =)
 
Сверху