![]() |
Посчитать количество дней между двумя датами
Имеется 2 переменных
Код:
Set /a Date1=180312 Формат всегда ГГММДД Нужно посчитать кол-во дней между ними ( = 72 ) Запнулся на такой задаче, предположение как решить: посчитать разность лет,месяцев,дней затем перемножить и сложить и играться с этими данными добавив условия но думаю есть решение проще... Буду благодарен за подсказку если таковое есть. Все это нужно сделать именно в bat |
Цитата:
|
wlad1164, мсье знает толк в извращениях. Тут час убить только на то чтобы прописать условия для всех месяцев, учесть високосный год, имхо, если так уж нужно получать эти данные в bat - проще выполнять вычисления, например, в powershell, в нужном формате возвращать результат и разбив его извращаться дальше.
|
Elven, ну, коллеги тут делать-то делали подобное, при большом желании напишут. А так — да, хотелось бы понять причины требования «только пакетный файл».
|
bat+js
Код:
@set @E=1; /* |
Iska, ну главный вопрос был в том а нет ли какой-либо функции для этого, насколько понял нет...
megaloman, спасибо что не поленились затратить время, но хотелось бы без JS.... Попыхтев пару часов получилось что то вроде этого: Коряво, но вроде работает
Код:
echo off Високосный год вроде бы тоже работает... по крайней мере мне так показалось))) Код корявый, можно и упростить, но сначала надо убедиться что работает правильно.... UPD Немного улучшенный вариант
Код:
echo off |
wlad1164, Меня количество Ваших если ужасает.
Вот мой вариант. Нормальные ленивые герои всегда идут в обход
Идея как и в JS: сделал функцию, которая вычислит порядковый номер заданного дня в дате начиная от 1 января 2000 (точнее -00) года . Затем разность посчитать - нет труда.
Код:
@Echo Off Set /a Date1=080312 а как строковый Set "Date1=080312" Вариант использования функции Код:
.................................. |
Есть такая штука, julian day называется, значительно облегчает расчет разницы между датами.
Код:
@echo off |
greg zakharov, наконец тор снова добрался до батника, предложенный Вами вариант работает, но не всегда, к примеру
2>nul set /a "d1=180312, d2=180508" Уже не сработает |
wlad1164, ошибка возникает из-за того, что командная строка считает числа начинающиеся с нуля в восьмеричной системе счисления, отсюда 08, например, будет недопустимым значением для данной СЧ. Чтобы избежать подобной ошибки нужно значения вроде того же 08 приводить к тому, что в понимании командного интерпретатора будет десятичным числом. Иначе говоря:
Код:
set /a "n=10%var%%%100" Код:
@echo off |
Время: 06:15. |
Время: 06:15.
© OSzone.net 2001-