Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


wlad1164, Меня количество Ваших если ужасает.
Вот мой вариант. Нормальные ленивые герои всегда идут в обход
Идея как и в JS: сделал функцию, которая вычислит порядковый номер заданного дня в дате начиная от 1 января 2000 (точнее -00) года . Затем разность посчитать - нет труда.
Код: Выделить весь код
@Echo Off
cls

Set "Date1=180312"
Set "Date2=180523"

Call :Days %Date1:~0,2%  %Date1:~2,2% %Date1:~4,2% "ND1"
Call :Days %Date2:~0,2%  %Date2:~2,2% %Date2:~4,2% "ND2"
Set /A ND=%ND2%-%ND1%

Echo %Date2%-%Date1%=%ND2%-%ND1%=%ND%
Pause
GoTo :Eof

:Days
SetLocal
	Set /A N01=0, N02=31, N03=59, N04=90, N05=120, N06=151, N07=181, N08=212, N09=243, N10=273, N11=304, N12=334
	Set /A V01=0, V02=31, V03=60, V04=91, V05=121, V06=152, V07=182, V08=213, V09=244, V10=274, V11=305, V12=335
	Set /A NN=%1-%1/4*4
	Set /A Dy=%1/4*1461+%NN%*365
	If %NN%==0 (Call Set MM=%%V%2%%) Else (Set /A Dy+=1 &Call Set MM=%%N%2%%)
	EndLocal &Set /A %~4=%Dy%+%MM%+%3
GoTo :Eof
Замечание: Если год начинается с 0, то надо его определять не как численный
Set /a Date1=080312
а как строковый
Set "Date1=080312"

Вариант использования функции
Код: Выделить весь код
..................................
Set "Date1=18 03 12"
Set "Date2=18 05 23"

Call :Days %Date1% "ND1"
Call :Days %Date2% "ND2"
..................................
В принципе, не сложно переделать и под четырёхзначный год, например, дни отсчитывать начиная с 1900 года, но задача Вами так не ставилась
Верю: это же можно сделать элегантнее, но я пока не знаю как

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-05-2018 в 10:20.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:34, 25-05-2018 | #7