Работа с датой и временем в PHP в ООП стиле. Часть 1
Перед web-разработчиками часто возникают задачи, в которых они должны работать с датой и временем. Если вы все еще используете PHP функции, такие как strtotime и date для работы с датой и временем в PHP, то вы многое упускаете.
PHP предоставляет специализированный класс DateTime для работы с датой и временем. Однако, многие игнорируют его использование, несмотря на то, что он доступен в PHP начиная с версии 5.2.
Вот несколько причин, почему предпочтительнее использовать класс DateTime вместо strtotime и date:
- Класс DateTime может работать с большим числом форматов даты и времени по сравнению с strtotime.
- Работать с объектами легче, чем с функциями. Даты, являющиеся объектами класса DateTime можно сравнивать напрямую, как обычные числа. Тогда как для сравнения двух дат с помощью функции strtotimе нам необходимо сначала преобразовать их во временные метки и только затем сравнить.
- Объектно-ориентированный интерфейс DateTime скрывает много внутренней логики работы с датой и обеспечивает понятный и однозначный интерфейс.
Создание объекта класса DateTime.
Создание объекта класса DateTime ничем не отличается от создания экземпляра какого-либо другого класса в PHP.
Если в конструктор класса DateTime не передавать параметр, то будет создан объект с текущей временной меткой и временной зоной по умолчанию. Временная зона в PHP, как правило, настраивается в файле php.ini. Вот так создается объект DateTime с текущим временем.
$now = new DateTime();
При необходимости мы можем передать в конструктор класса DateTime строку, представляющую собой правильную дату и время. В качестве временной зоны будет использована та, что установлена по умолчанию.
Несколько примеров создания объекта DateTime с передачей в конструктор строки, содержащей время.
$yesterday = new DateTime('yesterday'); // вчера
$twoDaysLater = new DateTime('+ 2 days'); // на 2 дня вперед
$oneWeekEarly = new DateTime('- 1 week'); // минус одна неделя
Второй параметр конструктора класса DateTime позволяет определить временную зону. Этот параметр имеет тип DateTimeZone.
Например, чтобы создать объект класса DateTime с временной зоной Москвы надо сделать следующее:
$yesterdayInMoscow = new DateTime('yesterday', new DateTimeZone('Moscow'));
Конечно, мы также можем создать объект DateTime как обычно, с помощью строки.
$dateTime = new DateTime('2015-01-01 12:30:12');
Формат
В зависимости от системы, которую мы собираемся проектировать, нам могут понадобится различные форматы даты и времени. Форматирование объекта DateTime в формат необходимый в конкретном проекте достаточно просто делается через метод DateTime::format().
Метод DateTime::format() принимает в качестве параметра строку. Эта строка может включать плейсхолдеры, перечисленные на странице официальной документации PHP.
Например, чтобы получить подобный формат YYYY-dd-mm, где Y – год, d – день, m – месяц необходимо сделать следующее:
$now = new DateTime();
$now = $now->format('Y-m-d');
Мы можем создать любой желаемый формат даты. Вот несколько дополнительных опций:
print_r($now->format('jS F Y'));
print_r($now->format('ga jS M Y'));
print_r($now->format('Y/m/d s:i:H'));
Сравнение дат и времени
Для того, чтобы сравнить две даты с помощью встроенной в PHP функции strtotime, нам сначала нужно преобразовать строковое содержимое этих дат в их эквиваленты временных меток.
В отличие же, от данной функции, объект DateTime предоставляет возможность сравнивать два объекта DateTime как два обычных числа. Вот несколько примеров:
$today = new DateTime('today');
$yesterday = new DateTime('yesterday');
var_dump($today > $yesterday); // bool(true)
var_dump($today < $yesterday); // bool(false)
var_dump($today == $yesterday); // bool(false)
Но бывают случаи, когда логическое значение от сравнения двух дат недостаточно. Например, нам нужно знать, точную разницу между двумя датами. И DateTime::diff() является тем методом, который поможет нам узнать разницу между двумя объектами DateTime. Этот метод возвращает объект класса DateInterval, который может быть использован для получения интервала, в любом требуемом нами формате посредством метода DateInterval::format.
Например, для получения количества дней между сегодняшней датой и вчерашней датой, мы можем сделать следующее:
$interval = $today->diff($yesterday);
echo $interval->format('%d день назад') // 1 день назад
Со всем разнообразием свойств класса DateInterval вы можете ознакомиться на официальном сайте PHP.
На этом все, и в следующей статье мы продолжим изучать классы для работы с датой и временем в PHP.
-
- Михаил Русаков
Комментарии (3):
Всем привет извините что пишу здесь но е могли бы подсказать хотел бы узнать как сделать так что бы ретрансляцию для моего сайта хочу чтобы например телеканал тнт транслировалась прямо с моего сайта а не сервера тнт.. Вот этот сайт введет трансляцию мачт тв с своего сервера http://fifa.beta.tj/schedule
Ответить
Уточните, пожалуйста, вы хотите чтобы, когда пользователь заходил к Вам на сайт, то он мог бы смотреть передачу на вашем сайте?
Ответить
ну вот например есть код видео трансляции (ТНТ) для вставки для других сайтов . и когда я вставлю этот код у посетителей расходуется трафик из сервера тнт, Я хочу чтобы расходовалось из моего сервера
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.