Друзья, коллеги, багородный сенат.
Ищу несколько алгоритмов, относящихся к вычислениям с календарными датами, ибо смутно ощущаю, что изобретаю какие-то дикие велосипеды, а все уже придумано до нас.
А именно. Есть две даты:
Код:
datIn = {D:day1, M:month1, Y:year1}
datOut = {D:day2, M:month2, Y:year2}
Надо:
1. Получить _ВСЕ_ наборы от dayIn до dayOut в виде день-месяц-год...
Сйчас реализовано в виде аж трех вложенных циклов, что, на мой взгляд, омерзительно:
Код AS1/AS2:
var allBronCelles = []
for ( var Y=StartYear; Y<=FinYear; Y++ ){ // Перебираю годы
if ( StartYear == Y ){ A = StartMnt } else { A = 0 }
if ( FinYear == Y ){ B = FinMnt } else { B = 11 }
for (var MN = A; MN<= B; MN++ ){ // Перебираю месяцы
if ( StartMnt == MN ) { SD = StartDay } else { SD = 1 }
if ( FinMnt == MN ) { FD = FinDay } else { FD = getDaysInMonth( Y )[ MN ] }
for ( var DAY = SD; DAY<=FD; DAY++ ){ // Перебираю дни
allBronCelles.push( { D:DAY, M:MN, Y:Y } )
}
}
}
Имхо громоздко и коряво... Работает, да, но...
2. Надо получить кол-во дней, прошедших от одной даты до другой.
У меня решение сейчас сводится к предыдущему динозавру + счетчик этих дней.
3. Определить, сколько дней относится к
каждому из месяцев, входящих в диапазон....
По идее снова берем ужас из п.1. и при смене месяца (корявость) счетчики пихаем в массив...
Подразумевается, что year1 - year2 может занимать лет 10-20.... Високостности, разные длины месяцев и прочее учитывается....
За неконвенционность - сорри.