![]() |
Класс для работы с датами расширенного диапазона
Сергей Лифшиц [03 декабря 2004]
Как известно, в Parser объект типа date имеет относительно небольшой диапазон возможных значений — от 01.01.1970 до 01.01.2038 года. Это плата за то, что объект класса внутри себя хранит дату в виде количества секунд, прошедших с начала диапазона. Таким образом, для хранения данных о времени он использует одну переменную типа int. Максимальное значение int — 2147483647. Поделив на 31536000 (количество секунд в году) получаем упомянутые выше 68 лет.
Как было замечено, основным случаем, когда диапазона стандартного класса начинает не хватать — является работа с днями рождений. Жутко много людей родилось до 1970 года. Именно по этой причине и был написан данный класс. Его диапазон шире: 17.11.1858 – 23.12.54078. Класс хранит данные в двух переменных типа int. В одной — количество суток, прошедших с начала диапазона. Во второй - количество секунд, прошедших с начала суток.
Чего не имеет и не умеет этот класс, относительно стандартного: нет поля TZ, всего один вариант конструктора аналогичный ^date::create[...], нет методов calendar, sql-string, unix-timestamp. Замечу, что при необходимости нуждающийся почти всё это может добавить без особых трудностей.
Основной вариант использования класса: ^cdate:print[дата_из_базы_данных;формат;локаль] — печать дат расширенного диапазона, взятых из базы данных.
Но если нужно больше — пожалуйста:
- cоздаете объект: $date[^cdate::create[1941-06-22 16:00:00.0]]
- пользуетесь всеми его полями: $date.year, $date.month, $date.day, $date.weekday и т.д.
- сдвигаете дату: ^date.roll[day](1417)
- пользуетесь другими полезными методами: ^cdate:daysbetween[1941;6;22;1945;5;9]
За подробностями — добро пожаловать в исходный код.
Скачать:
cdate.zip (03.12.2004 4,6 КБ)
Архив класса работы с датами расширенного диапазона
| E-mail: mailbox@parser.ru | Copyright © 1997–2011 | Студия Артемия Лебедева |