Начинающие и продолжающие разработчики, порой ленятся писать функции, которые делают интерфейсы более дружественными. В этот раз мы разработаем класс работы со временем.
Цель: написать класс, который позволит удобно и быстро работать с со временем и преобразовывать его в разные форматы, с многоязычной поддержкой.
Input: Стандартная дата со временем, формируемая полем DATATIME в MySQL, формата гггг-мм-дд чч: мм: сс, паттерн.
Реализация под катом
Output:
1. Возвращение по паттерну:
Y — год в формате гггг(1987)
y — год в формате гг(87)
Mi — месяц в цифрах(06)
MM — месяц словом целиком(Июня)
Mm — месяц коротко(первые три буквы)(Июн)
H — час в формате чч(24 часа)(15)
h — час в формате чч(12 часов)(3pm)
m — минуты в формате мм (45)
s — секунды в формате сс (36)
В конце каждого обозначения ставится точка с запятой, для большей однозначности.
2. г лет м месяцев д дней ч часов м минут назад (1 день 1 час 1 минуту назад)(автоматическое изменение окончаний числительных). До 100 дней, если запись старше ста дней, то выводится дата с использованием пулевого паттерна.
Вариации: Можно предопределить неограниченное количество паттернов, для удобства использования.
Предопределенные объекты:
1. defPat — массив предопределенных паттернов
2. local — массив со словами
Вход в метод:
timeGet(timestamp, [string\integer\bool pattern]); timestamp — таймстамп из базы pattern — или паттерн строка. Или номер паттерна. Или true меряет разницу от таймстампа.
Обработка ошибок:
Если не указан паттерн, то берется нулевой предопределенный паттерн.
Если паттерн не предопределен, то возвращается оригинальный тайстамп.
Если не указан таймстамп, то возвращается текст(!) «false».
Методы:
timeSplitter() Разбивает таймстамп на массив со специфичными названиями. Возвращает ассоциативный массив.
timeReplaser() Заменяет паттерн, на значения.
Сторонние методы:
utf8_substr — возвращает часть строки в кодировке utf-8.
connum — меняет окончания числительных.
Реализация
И так, с целями и параметрами мы определились, можно начинать работу.
Начнем со сплиттера, самое удобное считаю разбить таймстамп обычной регуляркой, немного громоздкой, но вполне сносно работающей. После регулярки все будет класться в массив и возвращается. Так же если таймстамп не соответствует регулярке, то в таймЭррор кладется текст ошибки и ретурн фэлс.
Далле timeReplaser, он просто заменяет через substr нужные подстроки в паттерне.
Можно было бы просто через цикл сделать замену, но к сожалению заменяющие строки у нас различаются по местоположению.
Комментарии (2)
RSS свернуть / развернутьhaZe
proXy
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.