Юлианскаю дата.

From
Aleksey Tarasow (2:5053/51.4)
To
All
Date
2002-10-01T18:31:18Z
Area
RU.ALGORITHMS
Привет All!

Тут как-то я задал вопрос как можно найти разницу между двумя датами, и день
недели по дате. Пришло ряд ответов. Особенно спасибо Сергею Бычкову (надеюсь
правильно прочитал :) на основе присланых им исходников я получил следующее.
(см. в конце). Но считает не правильно, вернее наполовину правильно. Проверял их
для 2001 года и выяснил что для мая, июля, октября, декабря и марта 2002
юлианкая дата считается на 1 больше чем нужно. Для следующих месяцев все
исправляется. Скорее всего это происходит из-за того что перед ними стоят месяца
по 30 дней. Кто нибудь может помочь решить эту проблему?

===  ачало data.lib ===
{Библиотека работы с датами}

function jd(day,mon,year:integer):integer;
  {Функция расчета юлианской даты, переработаной.
   Так же смотри ZX-РЕВЮ 1993 год страница 203,
   и файл jd.txt
   На входе: day  - число
             mon  - месяц
             year - год}
  const
    yearoffs=2000;
  var
    deyoffs:integer;
  begin
    if mon<3 then begin
       year:=year-1;
       mon:=mon+12;
    end; {if}
    deyoffs:=trunc(yearoffs/4-yearoffs/100+yearoffs/400);
    jd:=trunc(365*(year-yearoffs)+year/4-year/100+
        year/400+31*mon-((2*mon-4)/5)+day-deyoffs);
  end; {jd}

function dayofweek(jd:integer):integer;
  {Функция определений дня недели по юлианской дате.
  Подробнее смотри ZX-РЕВЮ 1993 страница 203.
  На входе: jd - юлианская дата.
  На выходе: 0 - воскресенье
            ...- .....
             6 - суббота}
    var
      d:integer;
    begin
      d:=(jd+1) mod 7;
      if d<0 then dayofweek:=d+7
        else dayofweek:=d;
    end; {dayofweek}
=== Конец data.lib ===

С уважением, Алексей.

--- ifmail v.2.15
 * Origin: Сила - последний аргумент тупиц. (2:5053/51.4)