Показать сообщение отдельно
Старый 11.05.2014, 08:41
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 1  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
По умолчанию Календарные исчисления

Друзья, коллеги, багородный сенат.
Ищу несколько алгоритмов, относящихся к вычислениям с календарными датами, ибо смутно ощущаю, что изобретаю какие-то дикие велосипеды, а все уже придумано до нас.

А именно. Есть две даты:

Код:
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.... Високостности, разные длины месяцев и прочее учитывается....
За неконвенционность - сорри.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2