Как сравнить даты?
Правда, если у вас нет машины времени, я не вижу смысла в такой проверке. Для всех уже родившихся людей всегда будет true.
Ответ написан более трёх лет назад
Нравится 3 18 комментариев
UncleDenn @UncleDenn Автор вопроса
Спасибо за ответ
А как сделать формат даты
dd/mm/yyyy
Stalker_RED @Stalker_RED
UncleDenn @UncleDenn Автор вопроса
сделал так ,но теперь в поле всегда ошибка
то есть :
15/01/2018 < 10/10/2010
может из-за того что что строка
let now = new Date(), date = now.toLocaleDateString('en-GB'),//15/01/2018 birthday = new Date(val);//10/10/2010
Stalker_RED @Stalker_RED
UncleDenn, и опять вы строки сравниваете а не даты.
А строка «15. » больше, чем «10. «, конечно-же.
Не делайте так, конвертируйте в строку только тогда, когда вам нужно эту дату вывести.
UncleDenn @UncleDenn Автор вопроса
Так мне её выводить не надо.Мне нужно сравнить что ввел юзер в инапт ,а там dd/mm/yyyy с теперешней датой ,соответственно в формате dd/mm/yyyy
UncleDenn @UncleDenn Автор вопроса
вот только как такой формат сделать разобраться не могу
Stalker_RED @Stalker_RED
UncleDenn, А зачем «сделать формат» если вы дату не выводите нигде? Просто конвертируете то что ввел юзер в дату, и сравниваете ее с текущей.
UncleDenn @UncleDenn Автор вопроса
Stalker_RED @Stalker_RED
UncleDenn, прокрутите выше, я в первом сообщении написал же.
UncleDenn @UncleDenn Автор вопроса
да тут проблема в том что стандартно в js, как я понял Date идет в формате mm/dd/yyyy ,а мой юзер вводит dd/mm/yyyy
Stalker_RED @Stalker_RED
UncleDenn, то есть вопрос не о том, как сравнить даты, а как распарсить?
let foo = '10/10/2001'.split('/') var someDate = new Date(foo[2], foo[1] - 1, foo[0]);
Возможно, вам стоит ознакомиться с moment.js
UncleDenn @UncleDenn Автор вопроса
Ну есть инпут туда юзер вводит дату в формате dd/mm/yyyy ,мне нужно сравнить с теперешней датой ,но когда я использую Date там все в формате mm/dd/yyyy то есть их сравнить нереально т.к. юзер ввел день ,а js думает что это месяц.Надо чтобы все как-то на места встало
Stalker_RED @Stalker_RED
UncleDenn, вот же я написал как сконвертировать
UncleDenn @UncleDenn Автор вопроса
Вроде должно работать , но этот код выдает такое:
var today = new Date(); let foo = '10/10/2001'.split('/') var birthday = new Date(foo[2], foo[1] - 1, foo[0]);//Wed Oct 10 2001 00:00:00 GMT+0300 (Финляндия (лето))
то есть снова mm/dd/yyyy
Stalker_RED @Stalker_RED
И его можно конвертировать в число либо в строку (в разных форматах, на выбор!)
UncleDenn @UncleDenn Автор вопроса
Извините я просто только изучаю)
Можете ,если не сложно показать как бы вы написали такой скрипт целиком
Stalker_RED @Stalker_RED
UncleDenn, я до сих пор не понимаю толком какую цель вы преследуете, но, предположим что:
1. юзер вводит дату в формате dd/mm/yyyy
2. нужно сравнить ее с текущей, и это как-то отобразить
получается как-то так: https://jsfiddle.net/39tetjsv/
Но у вас там в коде есть u_birthsday. Если это обработка даты рождения, то в этом сравнении НЕТ СМЫСЛА, потому что для всех людей которые уже родились, дата рождения будет в прошлом относительно текущего времени. А для тех, которые не родились — мы не знаем дату рождения.
Признавайтесь уже — у вас машина времени, или как?
Excel: как сравнивать даты без времени
Часто вам может потребоваться сравнить две даты в Excel, игнорируя значения времени, связанные с датами.
К счастью, вы можете использовать функцию INT() в Excel, чтобы извлечь только дату из значения даты и времени, что позволяет легко сравнивать даты, игнорируя время.
В следующих примерах показано, как использовать эту функцию INT() в различных сценариях.
Пример 1: сравнение дат без времени
Предположим, у нас есть следующий список значений даты и времени в Excel, который показывает, когда разные люди подписались на гонку на 5 км, а также крайнюю дату регистрации:

Мы можем ввести следующую формулу в ячейку B2, чтобы сравнить дату регистрации с датой окончания:
=IF(INT( A2 )
Затем мы можем перетащить и заполнить эту формулу до каждой оставшейся ячейки в столбце B:

Эта формула сравнивает только дату в столбце A с датой окончания в ячейке D2.
Если дата в столбце A равна или предшествует дате в ячейке D2, формула возвращает Valid .
В противном случае формула возвращает Not Valid .
Пример 2: сравнение и подсчет дат без учета времени
Еще раз предположим, что у нас есть следующий список значений даты и времени в Excel, который показывает, когда разные люди подписались на гонку на 5 км, а также крайнюю дату регистрации:

Мы можем ввести следующую формулу в ячейку F2, чтобы подсчитать общее количество дат регистрации, которые равны или предшествуют дате отсечки:
=SUMPRODUCT((INT( A2:A10 )

Из вывода мы видим, что 5 полных дат в столбце A равны или предшествуют дате отсечки.
Используя функцию INT() , мы смогли сравнить только часть даты значений даты и времени в столбце A с датой отсечки.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:
Как сравнить 2 даты
Может и брежу но тем не менее
Если Дата>ДатаРассмотрения тогда
ОформлениеСтроки.ЦветФона=Новый Цвет (255,200,200);
КонецЕсли
КонецПроцедуры
: Переменная не определена (Дата)
Если >Дата>ДатаРассмотрения тогда
: Переменная не определена (ДатаРассмотрения)
Если Дата>>ДатаРассмотрения тогда
Так ведь написано - "Переменная не определена.
Где ДатаРассмотрения вычисляется?
Код выше покажи.
Документ.Обращение.Форма.ФормаСписка - тама список какой то.
значится надо брать оттуда текущую строку, и уж с ней работать.
(5) жесть - как на основании этого можно было родить такой вопрос?
(5) этот кусок кода из какого то события вызывается?
Согласен . Есть список документов (обращения) туда ставляем этот код для того что бы если событие выполняется тогда поля окрашиваются в красный цвет
Теперь сделал вот так
Если ДокументСписок.Дата>ДокументСписок.ДатаРассмотрения тогда
ОформлениеСтроки.ЦветФона=Новый Цвет (255,200,200);
КонецЕсли
И тем не меннее
Документ.Обращение.Форма.ФормаСписка(4)>: Поле объекта не обнаружено (Дата)
Если ДокументСписок.Дата>ДокументСписок.ДатаРассмотрения тогда
(12) Сча попробую
(13) : Значение не является значением объектного типа (Дата)
Если ЭлементыФормы.ДокументСписок.ТекущиеДанные.Дата>ЭлементыФормы.ДокументСписок.ТекущиеДанные.ДатаРассмотрения тогда
Документ.Обращение.Форма.ФормаСписка(4)>
(15) Ты хочешь, чтоб при открытии формы списка автоматом перекрасились строки? Если да, тогда тебе надо все это впихнуть в событие формы списка "ПриВыводеСтроки"
(16) Я так и сделала но ругается на : Значение не является значением объектного типа (Дата) Не занеш почему?
Я чувствую истина где то рядом может хто подскажет тогда что такое: Значение не является значением объектного типа (Дата)?
Сравнение дат
Раньше знаю надо было переводить в разные таймштампы, но похоже сейчас, если задать дату именно в таком формате. все должно быть ок, разве не так?
Отслеживать
14.3k 1 1 золотой знак 21 21 серебряный знак 35 35 бронзовых знаков
задан 2 окт 2011 в 15:44
Mykhaylo Petyakh Mykhaylo Petyakh
65 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков
Врядли потому что в таком случае вы сравниваете строки.
2 окт 2011 в 17:33
@AlexWindHope Неправда! Сравните это $curdate = date('d.m.Y', strtotime('now')); $revenge_date = "25.05.2015"; если будут первые числа месяца, то они будет меньше 25, хоть и год будет больше. И код будет работать неправильно!
27 апр 2015 в 19:22
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Если обе даты точно в формате Y-m-d (или Y-m-d H:i:s ), то логично сравнивать их как строки, т.е.
$date1='2011-02-12'; $date2='2012-02-13'; $result=($date1<$date2); //$result === true
Но если нет уверенности, что формат дат одинаковый, то лучше привести их к формату unixtime и сравнивать как числа:
$date1='2011-02-12'; $date2='13.02.2012'; $result=($date1<$date2); //$result === false $result=(strtotime($date1)
Отслеживать
20.4k 3 3 золотых знака 27 27 серебряных знаков 49 49 бронзовых знаков
ответ дан 2 окт 2011 в 20:52
196 7 7 бронзовых знаков
Ну практически то же что и я написал только в коде, согласен
3 окт 2011 в 6:02
> Если даты точно в одном формате, то логично сравнивать их как строки, т.е. Это не совсем так. Что бы сравнение строк работало корректно, нужно не только, что бы формат совпадал, но и что бы этот формат соответствовал стандарту ISO 8601, по которому дата записывается по убыванию значимости. Т.е. вариант date('d.m.Y') >= '02.11.2011' уже работать не будет, хоть формат и совпадает.
