Получение даты и времени в PHP. Функция date
В этой статье будет рассмотрено, как работать с датой и временем в языке программирования PHP. Также читатель узнает о таких функциях для работы со временем, как date() , time() и mktime() .
Вместо предисловия
Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров: — элементарное добавление даты в запись БД; — отображение времени; — вывод дат в различном формате; — проверка текущего времени на соответствие заданному таймеру; — определение срока между 2-мя датами и так далее.
Чтобы работать со временем было удобно, у каждого языка программирования имеются специальные типы данных, позволяющие хранить соответствующие значения. Обычно речь идёт о числовом значении, как целом, так и с плавающей точкой.
В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.
Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:
На момент написания материала было 14 октября 2020 года, поэтому в терминале отобразилось следующее:
Вы можете проверить вышеописанную команду и получить в PHP текущую дату и время самостоятельно, даже если не являетесь PHP-разработчиком — просто поместите код в любой онлайн-компилятор, вот один из многих. Так же рекомендуется делать и с остальным кодом — это поможет вам лучше понять работу описываемых в статье команд.
Но вернёмся к основной теме разговора. Благодаря коротенькому коду выше, мы получили от сервера текущее время — 1602666005 (у вас значение будет другим, ведь время не стоит на месте))).
Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.
Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.
Функция date
Эта функция возвратит пользователю строку в форме даты/времени, сделав это в определённом формате. Формат этот определяет сам пользователь.
Синтаксис функции выглядит так:
Видно, что формат указывается в качестве аргумента. Этим аргументом могут выступать самые разные символы, коих существует целая таблица:
Теперь давайте попробуем, как эта таблица работает на практике. Выведем текущий день недели:
У меня получился Wednesday, а вот что отобразится в консоли у вас, зависит от дня недели, в который вы напишете эту команду.
Теперь выведем дату в виде YYYY-ММ-DD:
Описание time и mktime
Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.
Для начала займёмся её использованием вместе с меткой текущей даты:
* 24 * 60 * 60); // 7 дней; 24 ч.; 60 мин.; 60 сек. echo $nextWeek; // будет выведено что-то вроде 16026782231603283023А теперь используем её же, но уже совместно с date() . Давайте выведем текущую дату двумя способами, а потом выведем дату, которая наступит через неделю:
* 24 * 60 * 60); // Первый способ вывода даты echo 'Сегодня: '. date('Y-m-d') ."\n"; // Второй способ вывода echo 'Сегодня: '. date('Y-m-d', $now) ."\n"; // Дата через неделю echo 'Через неделю будет: '. date('Y-m-d', $nextWeek) ."\n";Теперь стоит поговорить о том, каким образом с функцией time используется mktime. Именно mktime возвращает метки времени Unix для даты, которую укажет пользователь.
Аргументы могут быть разные, а также опущены справа налево:
![]()
Лучше всего рассмотреть вышеописанное на примере. Давайте выведем в терминал: — текущую полную дату и время (часы, минуты, секунды); — время и дату завтрашнего дня; — время и дату следующего месяца того же дня; — ту же дату, но уже прошедшего года.
На этом всё. Если интересуют более сложные и продвинутые знания по PHP, обратите внимание на соответствующий курс в OTUS!
Php дата часы минуты
На этой странице описаны форматы даты/времени в BNF-подобном синтаксисе, которые понимает парсер функций: DateTimeImmutable , DateTime , date_create() , date_create_immutable() и strtotime() .
Чтобы отформатировать объекты DateTimeImmutable и DateTime , обратитесь к документации метода DateTimeInterface::format() .
Описание | Формат | Примеры |
---|---|---|
frac (дробная часть) | . 5+ | ".21342", ".85" |
hh (часы в 12-часовом формате) | "0"?5 | "1"2 | "04", "7", "12" |
HH (часы в 24-часовом формате) | [01]6 | "2"4 | "04", "07", "19" |
meridian (Ante meridiem или Post meridiem) | [AaPp] .? [Mm] .? [\0\t ] | "A.m.", "pM", "am." |
MM (минуты) | 33 | "00", "12", "59" |
II (секунды) | 29 | "00", "12", "59" |
space (символ пробела или табуляции) | [ \t] | |
tz (часовой пояс) | "("? [A-Za-z] ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+ | "CEST", "Europe/Amsterdam", "America/Indiana/Knox" |
tzcorrection (числовое значение смещения часового пояса) | "GMT"? [+-] hh ":"? MM ? | "+0400", "GMT-07:00", "-07:00" |
Описание | Формат | Примеры |
---|---|---|
Только часы (с Ante meridiem или Post meridiem) | hh space ? meridian | "4 am", "5PM" |
Часы и минуты (с Ante meridiem или Post meridiem ) | hh [.:] MM space ? meridian | "4:08 am", "7:19P.M." |
Часы, минуты и секунды (с Ante meridiem или Post meridiem ) | hh [.:] MM [.:] II space ? meridian | "4:08:37 am", "7:19:19P.M." |
MS SQL (Часы, минуты, секунды и дробная часть с Ante meridiem или Post meridiem) | hh ":" MM ":" II [.:] 8+ meridian | "4:08:39:12313am" |
Описание | Формат | Примеры |
---|---|---|
Часы и минуты | 't'? HH [.:] MM | "04:08", "19.19", "T23:43" |
Часы и минуты (без двоеточия-разделителя) | 't'? HH MM | "0408", "t1919", "T2343" |
Часы, минуты и секунды | 't'? HH [.:] MM [.:] II | "04.08.37", "t19:19:19" |
Часы, минуты и секунды (без двоеточия-разделителя) | 't'? HH MM II | "040837", "T191919" |
Часы, минуты, секунды и часовой пояс | 't'? HH [.:] MM [.:] II space ? ( tzcorrection | tz ) | "040837CEST", "T191919-0700" |
Часы, минуты, секунды и дробная часть | 't'? HH [.:] MM [.:] II frac | "04.08.37.81412", "19:19:19.532453" |
Сведения о часовом поясе | tz | tzcorrection | "CEST", "Europe/Amsterdam", "+0430", "GMT-06:00" |