====== lmbDate ====== **Класс lmbDate** - инкапсулирует дату (под датой здесь понимается полная дата, то есть число и время) и предоставляет методы для ее работы с ней, в частности модификации и форматирования. Ниже идут примеры использования различных методов класса lmbDate сгрупированных по назначению. ===== Инициализация объектов класса lmbDate ===== **Конструктор lmbDate** может принимать различное число параметров: **Без параметров, тогда будет использован timestamp из time()** lmb_require('limb/datetime/src/lmbDate.class.php'); $date = new lmbDate(); // Эквивалентно new lmbDate(time()); **Целочисленное число, которое будет воспринято как timestamp:** $date = new lmbDate(time()); $date = new lmbDate(1178867400); **2 целочисленных числа, тогда первое будет воспринято как timestamp, а второе - как часовой пояс:** $date = new lmbDate(time(), 2); **Объект класса lmbDate, тогда по сути мы создадим клон переданного объекта:** $date1 = new lmbDate(time()); $date2 = new lmbDate($date1); **6 целочисленных чисел, которые означают соответственно год, месяц, день, час, минуту и секунду. Любое количество параметров, кроме года и месяца можно опустить (будут использованы нулевые значения или 1 для дня):** $date1 = new lmbDate(2006, 12, 1, 12, 20, 20); $date2 = new lmbDate(2006, 12, 1, 12, 20); // эквивалентно new lmbDate(2006, 12, 1, 12, 20, 0) $date3 = new lmbDate(2006, 12, 1, 12); // эквивалентно new lmbDate(2006, 12, 1, 12, 0, 0) $date4 = new lmbDate(2006, 12); // эквивалентно new lmbDate(2006, 12, 1) **7 целочисленных чисел, которые означают соответственно год, месяц, день, час, минуту, секунду и часовой пояс.:** $date = new lmbDate(2006, 12, 1, 12, 20, 20, "Etc/GMT-3"); **Строку с датой в ISO-формате:** $date1 = new lmbDate("2006-12-01 12:20:20"); $date2 = new lmbDate("2006-12-01 12:20"); // эквивалентно new lmbDate("2006-12-01 12:20:0"); $date3 = new lmbDate("2006-12-01"); // эквивалентно new lmbDate("2006-12-01 00:00:00"); $date4 = new lmbDate("2006-12-01 12:20:20", "Etc/GMT-3"); Помимо вызова конструктора lmbDate есть несколько других способов создать объект класса lmbDate: * **create(...)** - в целом повторяет сигнатуру конструктора, но этот метод удобно использовать в chain-операциях (см. пример ниже), так как PHP не позволяет вызывать методы объекта сразу после вызова конструктора. * **createByDays($days)** - создает дату на основании количества дней, прошедних с 1 января 1970 года. Например: $date = lmbDate :: create("2006-12-01 12:20:20")->addMinute(10)->addSecond(30); // вместо lmbDate("2006-12-01 12:20:20")->addMinute(10)->addSecond(30); , что в PHP запрещено. $days = $date->getDateDays(); $date2 = lmbDate :: createByDays($days + 3); // получили дату на 3 дня больше, то есть "2006-12-03 12:30:50" ===== Получение информации о текущей дате ===== lmbDate содержит большой набор методов для получения информации о дате: * **getStamp()** - возвращает timestamp даты * **getYear()** - возвращает значение года * **getMonth()** - возвращает значение месяца (1 - 12) * **getDay()** - возвращает значение дня (1 - 31) * **getHour()** - возвращает значение часа (0 - 23) * **getMinute()** - возвращает значение минуты (0 - 59) * **getSecond()** - возвращает значение секунды (0 - 59) * **getTimeZone()** - возвращает номер часового пояса * **getTimeZoneObject()** - возвращает объект класса [[lmbTimeZone]] для часового пояса * **getPhpDayOfWeek()** - возвращает номер дня недели, найденное при помощи php-функции date('w') (0 - Воскресенье). * **getIntlDayOfWeek()** - возвращает номер дня недели с коррекцией (0 - Понедельник, 6 - Воскресенье). * **isLeapYear()** - возвращает true, если год високосный. * **getDayOfYear()** - возвращает порядковый номер дня в указанном году, начиная с 1. Например, 3 февраля - это 34. * **getWeekOfYear()** возвращает порядковый номер недели в указанном году, начиная с 1. Например, 31 декабря - это 52 ===== Установка дня, соответствующего началу недели ===== lmbDate содержит статическую переменную **$week_starts_at**, которая содержит значение дня, который следует считать первым днем недели. По-умолчанию, эта переменная содержит 1, что соответствует Понедельнику. Если стоит значение 0 - это будет значит, что первый день недели - Воскресенье. Для установки этой переменной есть метод lmbDate :: **setWeekStartsAt($n)** ===== Создание нового объекта lmbDate на основе существующего ===== lmbDate ведет себя как **value object**, то есть при его изменении всегда создается **новый** объект. lmbDate содержит большой набор методов, которые позволяют получить новый объект класса lmbDate на основе существующего. Начнем с самых банальных: * **setYear($y)** * **setMonth($m)** * **setDay($d)** * **setHour($h)** * **setMinute($m)** * **setSecond($s)** Каждый из этих методов возвращает объект класса lmbDate с новой датой. Пример: $date1 = new lmbDate(time()); $date2 = $date1->setHour(0)->setMinute(0)->setSecond(0); lmbDate поддерживает некоторое подобие **арифметических операций**: * **addYear($n=1)** * **addMonth($n=1)** * **addWeek($n=1)** * **addDay($n=1)** * **addHour($n=1)** * **addMinute($n=1)** * **addSecond($n=1)** **$n** - может быть **отрицательным числом**, то есть таким образом можно отнимать года, месяца, дни и т.д. Например: // Для получения последнего числа текущего месяца. $date2 = $date->setDay(1)->addMonth(1)->addDay(-1); Есть так же группа более специфичных методов, которые могут быть использованы, например, при построении календарей: * **getBeginOfDay()** - возвращает дату (объект класса lmbDate), у которой час, минута и секунда сброшены на 0. * **getEndOfDay()** - возвращает дату (объект класса lmbDate), у которой час = 23, минута =59 и секунда = 59. * **getBeginOfWeek()** - возвращает дату, которая соответствует первому дню недели от базовой даты. То, какому дню будет соответствовать первый день недели - Воскресенью или Понедельнику, зависит от статической переменной lmbDate :: week_starts_at. * **getEndOfWeek()** - возвращает дату, которая соответствует поснеднему дню недели от базовой даты. * **getBeginOfMonth()** - возвращает дату, которая соответствует первому числу месяца базовой даты * **getEndOfMonth()** - возвращает дату, которая соответствует последему числу месяца базовой даты * **getBeginOfYear()** - возвращает дату, которая соответствует первому числу года базовой даты * **getEndOfYear()** - возвращает дату, которая соответствует последнему числу года базовой даты * **stripTime()** - аналог getBeginOfDay(). * **stripDate()** - сбрасывает на 0 год, месяц и день. ===== Методы для сравнения дат ===== lmbDate также содержит набор методов для сравнения дат между собой: * **compare($d)** - возвращает 0, если даты равны, 1, если текущая дата после $d и -1, если текущая дата до $d. * **isBefore($d)** - возвращает true, если текущая дата до $d * **isAfter($d)** - возвращает true, если текущая дата после $d * **isEqual($d)** - возвращает true, если даты равны. * **isEqualDate($when)** - возвращает true, если числа дат равны ===== Методы для форматирования дат ===== lmbDate также содержит базовые методы для вывода даты (форматирования) в ISO-формате: * **getIsoDate($with_seconds = true)** - полная дата в ISO-формате с секундами или без. * **getIsoShortDate()** - только число без времени в ISO-формате * **getIsoTime($with_seconds = true)** - только время с секундами или без в ISO-формате * **getIsoShortTime()** - только время без секунда в ISO-формате ===== Дополнительные методы ===== * **stampToIso($stamp)** - создает объект lmbDate на основе timestamp и форматирует его до ISO-даты. * **toString()** - алиас для getIsoDate() * **toUTC()** - возвращает объект даты приведенный к 0-му часовому поясу.