Зарегистрируйтесь для доступа к 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 по информации о времени: секундах, часах, минутах и дате.

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") ]]]]]] )

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

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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев

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

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

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

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

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу