Инструменты пользователя

Инструменты сайта


limb3:ru:packages:datetime:lmb_date

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-му часовому поясу.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ____   ____   ___    __    ____
  / __/  / __/  / _ \  / /   / __/
 / _/   / _/   / // / / /__ / _/  
/_/    /_/    /____/ /____//_/
 
limb3/ru/packages/datetime/lmb_date.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)