Зарегистрируйтесь, чтобы продолжить обучение

Дата и время Основы PHP

Вы когда-нибудь задумывались о том, как хранится в компьютере время? В этом уроке мы обсудим, как работают время и дата и где они хранятся.

Время

Как вы знаете, включение и выключение компьютера никак не влияет на часы. Можно сделать вывод, что часы в компьютере работают сами по себе.

Это действительно так. Основные часы компьютера — аппаратные. Они живут самостоятельной жизнью и имеют свою собственную батарею. При включении компьютер считывает данные этих часов, записывает к себе в память и начинает самостоятельно отсчитывать время. Эти часы называются системными. Любое изменение системных часов влияет и на аппаратные.

В Linux, Unix, MacOS и большинстве других операционных систем системное время представляется в формате Unix Time. Оно определяется как количество секунд, прошедших с этого момента:

00:00:00 UTC 1 января 1970 года (четверг)

Время с этого момента называют «эрой Unix» (Unix Epoch). Unix-время представлено целым числом, которое увеличивается с каждой прошедшей секундой без необходимости вычислений для определения года, месяца, дня, часа или минуты.

Конкретная дата в формате Unix Time называется timestamp — временной штамп. Например, для получения текущего timestamp в PHP используется функция time():

<?php

time(); // 1532435204

Дата

Одна из главных функций по работе с датами в PHP — date(). Она конвертирует timestamp в человекочитаемый формат.

Первым параметром в эту функцию передается описание формата даты, которое похоже на форматы для функции sprintf():

<?php

// Y означает год
date('Y'); // 2018

По умолчанию date() использует текущее время. Но если нужно, ей можно передать конкретный timestamp:

<?php

date('M', 123123123); // Nov

Различных опций форматирования в функции date() — десятки. Все они подробно перечислены на странице документации. Вряд ли стоит их все запоминать, но понимать общий принцип работы — полезно. Все опции могут комбинироваться между собой в любых вариациях:

<?php

date('l jS \of F Y h:i:s A'); // Thursday 26th of July 2018 10:58:55 AM

Функция mktime()

Функция mktime() генерирует timestamp по информации о времени: секундах, часах, минутах и дате:

mktime(
    int $hour,
    ?int $minute = null,
    ?int $second = null,
    ?int $month = null,
    ?int $day = null,
    ?int $year = null
): int|false

mktime() — многословная функция, в которой каждая часть даты и времени передается как отдельный параметр:

<?php

mktime(0, 0, 0, 7, 1, 2000); // 962409600

Часовые пояса

Одна из самых сложных деталей при работе с датами — часовые пояса (time zones).

Вся Земля делится на 24 часовых пояса, так что в соседних поясах время чаще всего отличается на час. Нулевым временем считается всемирное координированное время (UTC). Часовые пояса вокруг земного шара выражаются, как положительное или отрицательное смещение от UTC. Например, в Москве часовой пояс +3.

Изюминку в этот механизм добавляет переход на летнее и зимнее время. Причем если пояса строго фиксированы, то переход на зимнее и летнее время — прерогатива конкретных государств, которые периодически его вводят или отменяют. Время UTC никогда не переводят, смещения происходят относительно него. Кроме этого, есть еще тысяча и одна проблема.

Главное правило при работе с датами — хранение и сравнение должно производиться в UTC формате. А вот выводить даты лучше в той зоне, в которой живет пользователь.

Если вам нужно проверить текущую таймзону, можно воспользоваться функцией date_default_timezone_get(). Установить зону функцией date_default_timezone_set().


Дополнительные материалы

  1. Примеры форматов дат
  2. Список поддерживаемых временных зон в PHP

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»