Время

Автор: Юрий Клещетников Дата: 10.03.2009 10:42 Я не программист и в PHP ничего не смыслю, но вчера вечером, как учил меня учитель информатики в школе Дмитрий Геннадьевич составил приблизительный алгоритм:


*******************************************
Цель — создать программу, способную заполнять форму с данными даты рождения, сохранять значения, вычислять возраст человека как разницу сегодняшнего дня и даты рождения, сохранять дату регистрации.

1. Преобразование даты в число.

Число состоит из трёх составляющих:
день месяца;
месяц;
год;

Дата начала отчёта является 1 января 1 года нашей эры и представляет число 1.
Месяц преобразуется в число исходя из количества дней в указанном месяце и количества дней всех месяцев за год, шедших до этого месяца.
Год преобразуется в число с учётом того, что каждый четвёртый год является високосным. В нём на один день больше благодаря тому, что в феврале добавляется один день.
Суммы дня месяца месяца и года складываются и преобразуются в глобальное число.


Перевод года в число.

Есть 2 типа года — високосный и не високосный (согласно григорианскому календарю).
Високосный, каждый четвёртый, на 1 день больше невисокосного.

Для положительного числа год ( год строго больше 0 )
Если (Остаток от деления (числитель=год / знаменатель=4) не равен числу 0 (ноль), то год високосный (1), иначе не високосный (0))

Количество дней, добавленных от точки отчёта до текущего года.

Год за минусом числа 1 разделить на число 4, округлить до ближайшего меньшего целого.
Год за минусом числа 1 умножить на число 365 (дней в невисокосном году).

Месяц.
Создать массив из 12 месяцев.
Присвоить каждому месяцу число, соответствующее григорианскому календарю в не високосный год.
Сложить числа из массива всех месяцев до данного месяца.
Или проще. Сразу создать массив с нужными числами.

Если дата рождения позднее 28 февраля, то проверить високосность года. Если год високосный — добавить число 1.

Число.
Сложить числа полученные от года и месяца со значением числа месяца.

2. Преобразовать текущую дату в число.

По сути — обратное преобразование.
Вызвать функцию, которая определяет текущую дату и разбивает её на день, месяц, год.
От года отнять число 1 и умножить на 365.

Разделить разницу года и числа 1 на число 4. Взять округлённое до ближайшее меньшее целое число.
Сложить получившееся значения.
Вызвать массив из предыдущей функции.
Преобразовать месяц в число.
Сложить числа от месяца, года и числа месяца.

3. Разница числа текущей даты (регистрации) и даты рождения.

4.Преобразовать число в годы.
....
**********************************************************************************

Свою мысль я не окончил.
Может местные умельцы помогут Кантеру состряпать рабочий код ?
Ведь Линуксоиды любят создовать свобоное ПО (ИМХО)
Re: Время 10.03.2009 10:55BigAndy >Разделить разницу года и числа 1 на число 4
/me подозревает, что что-то не то в омском королевстве...
Re: Время 10.03.2009 11:03Юрий Клещетников Летоисчисление не с нулевого года, а с первого, поэтому нужно отнимать единицу. ИМХО.
А если дата рождения до 28 февраля, то добавление 29 февраля нецелесообразно.
Я могу ошибаться, Вы вправе подвергать сомнению.
Re: Время 10.03.2009 17:04kosmonavt > Есть 2 типа года — високосный и не високосный (согласно григорианскому календарю).

А согласно юлианскому?

> Летоисчисление не с нулевого года, а с первого, поэтому нужно отнимать единицу. ИМХО.

Представил себе Юлия Цезаря, который пытается осилить понятие нуля
Re: Время 10.03.2009 17:40smaharbA високосный год очень не прост, и 400 и 128 и еще
Re: Время 11.03.2009 14:08Юрий Клещетников //и 400 и 128 и еще
Чего ?
Re: Время 11.03.2009 14:18aboris Юрий Клещетников Пишет:
-------------------------------------------------------

Чего ? пишет:

Учиться тебе Юра надо, для начала в средней школе. Вот чего. 8-(
Re: Время 11.03.2009 14:22msv2 Скорее всего дело в том, что если число лет делится на 400 этот год не будет високосным ну и так далее
RSS-материал