Вычитание дат
Приветствую.
Скажите, а есть какие то встроенные способы узнать что одна дата >= другой даты на например 10 лет. Чтобы без какого то ручника, типа считать количество дней или миллисекунд. Вот примерно как в php что я делаю: $res = isDateMoreThan10Diff( \DateTime::createFromFormat('d.m.Y', $date1), \DateTime::createFromFormat('d.m.Y', $date2), )); function isDateMoreThan10Diff(\DateTime $dateStart, \DateTime $dateEnd) { $interval = $dateStart->diff($dateEnd); $check = $interval->format('%r%y'); if (strpos($check, '-') === 0) { return false; } return (intval($check) >= 10) ? true : false; } И как лучше дату в js дату преобразовывать, в плагине она у меня в формате dd.mm.yyyy |
Цитата:
let d1 = '22.01.2007' let d2 = '25.05.2021' const re = /(\d\d)\.(\d\d)\.(\d+)/ d1 = d1.replace(re,'$3$2$1') d2 = d2.replace(re,'$3$2$1') const val = (d2 - d1) / 10000 alert(val > 10) |
Цитата:
|
А что за магическая величина 10000?
|
Цитата:
YYYYMMDD - если разделить такое число на 10000, ты и получишь свои года. |
Я сомневаюсь что дату можно так превращать в десятичное число и что то с ним делать.
Дни, месяцы и года - это не десятичная система счисления. |
Цитата:
Но мы с таким вариантом уже более 30 лет определяем возраст (в годах) и проблем не имели. |
Цитата:
Но ты можешь сомневаться сколько хочешь... :D |
Твое решение неверное.
В году никак не 10000 дней, и не 100 месяцев, чтобы так сравнивать "просто для сравнения" |
Цитата:
|
Цитата:
Вместо голословных утверждений начинай тестировать. ;) Попробуй найти пример где разность дат, таким образом, покажет не правильное количество лет. Или даст не правильное сравнение по годам. Вот если найдешь такие даты (хоть одну пару) - тогда и будешь надувать щеки и обвинять меня в не верных алгоритмах. |
micscr,
следите за руками, задача узнать что больше ли текущее время, 9 часов 10 минут(для примера) 10 часов. классика: вычислить минуты 9 * 60 + 10 и 10 * 60, 550 < 600, меньше а можно так 9.1 < 10 и тот же результат. |
Цитата:
let d1 = '29.02.2008' let d2 = '28.02.2018' const re = /(\d\d)\.(\d\d)\.(\d+)/ d1 = d1.replace(re,'$3$2$1') d2 = d2.replace(re,'$3$2$1') const val = (d2 - d1) / 10000 alert(val >= 10) //false... Но вообще я понял это трюк, что годами с хвостиками играть. Из кода я сразу этого не понял, сам уже давно просто чистый код пишу, где переменные сами за себя говорят |
Цитата:
|
Цитата:
alert(150000 / 10000) Т.е. не всегда при делении на 10000 будет (ожидаемое) целое число. Т.ч. нужно правильно округлять результат деления. Хотя, может при именно делении на число кратное 10 проблем не будет... |
Ты прав, для операции вычитания дат тут вроде все окей, это по сути реализация алгоритма сравнения: год-год, месяц-месяц, день-день.
|
Часовой пояс GMT +3, время: 03:13. |