Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Дата и время Основы 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

Date

Одна из главных функций по работе с датами в 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
1 декабря 10 месяцев

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

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

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

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