| 
			
			 
			
				10.11.2010, 22:31
			
			
			
		 | 
	| 
		
			
			| Активный |  | 
					Регистрация: 12.06.2008 Сообщения: 313
 Репутация: 40     |  | 
	| 
				 Перевод даты в дни 
 Здравствуйте! Написал функции перевода даты в дни, начиная с 1 января какого-либо года 
	Код: const
  BeginYear = 2006;
  ShiftYear = 4 - BeginYear mod 4; // сдвиг года к високосному
var
  MonthDays: array [0..12] of Word =
            (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
function DateToDays(const Year, Month, Day: Word): Cardinal;
var
  i, Days: Cardinal;
begin
// число дней
  Days := Day;
// пересчет месяцев в дни
    for i := 1 to Month-1 do
      Inc(Days, MonthDays[i]);
// пересчет лет в дни
  Days := Days + Year*365 + ((Year+ShiftYear) div 4) - 1;
// если високосный и месяц январь или февраль
    if (((Year+ShiftYear) mod 4) = 0 ) and (Month <= 2) then
      Dec(Days); // убираем день
  result := Days;
end;
procedure DaysToDate(const CodeDate: Cardinal; var Year, Month, Day: Word);
var
  Years, i: Cardinal;
  Days: Integer;
begin
  Years := CodeDate div 365;
  Days := CodeDate mod 365 - ((Years+ShiftYear-1) div 4);
    if Days < 0 then
    begin
      Dec(Years);
      Days := Days + 365;
        if ((Years+ShiftYear) mod 4) = 0 then
          Inc(Days);
    end;
    if (((Years + BeginYear)  mod 4) = 0) and (Days >= 31+29) then
      Dec(Days);
  Year := Years;
    for i:=1 to 12 do
      if Days >= MonthDays[i] then
        Dec(Days, MonthDays[i])
      else
      begin
        Month := i;
        break;
      end;
  Day := Days+1;
end; 
Так вот, все работет отлично, но постоянное появляется ошибка определения 29.02 любого високосного года =( В чем может быть ошибка? Может быть кто-нибудь сталкивался с подобной задачей?
			
 
			
			
			
				  |