Разработчику. Сборник рецептов PHP
Задавайте вопросы

Вывод на печать даты и времени в определенном формате

Вернуться назад

Задача

Необходимо вывести на печать дату и время, отформатированные определенным образом.

Решение

Это делается при помощи функции date() или функции strftime():

print strftime('%c');
print date('m/d/Y');
Tue Jul 30 11:31:08 2016
07/30/2006

Обсуждение

Функции date() и strftime() отличаются гибкостью и способны вырабатывать форматированную строку времени с множеством компонент. В таблице перечислены символы форматирования, поддерживаемые этими функциями. В столбце Windows показано, поддерживает ли функция strftime() символ форматирования в системе Windows.

Символы форматирования функций strftime() и date()
Тип strftime() date () Описание Диапазон Windows
Час %H H Час, числовое значение, 24-часовой формат часов 00–23 Да
Час %I h Час, числовое значение, 12-часовой формат часов 01–12 Да
Час %k   Час, числовое значение, 24-часовой формат часов, начальный нуль в качестве пробела 0–23 Нет
Час %l   Час, числовое значение, 12-часовой формат часов, начальный нуль в качестве пробела 1–12 Нет
Час %p A AM или PM обозначение для текущей локализации   Да
Час %P a am/pm обозначение для текущей локализации   Нет
Час   G Час, числовое значение, 24-часовой формат часов, начальный нуль исключен 0–23 Нет
Час   g Час, числовое значение, 12-часовой формат часов, начальный нуль исключен 0–1 Нет
Минута %M I Минута, числовое значение 00–59 Да
Секунда %S s Секунда, числовое значение 00–61(*) Да
Диапазон секунд расширен до 61, чтобы учесть потерянные секунды.
День %d d День месяца, числовое значение 01–31 Да
День %e   День месяца, числовое значение, начальный нуль в качестве пробела 1–31 Нет
День %j z День года, числовое значение 001–366 для strftime(); 0–365 для date( ) Да
День %u   День недели, числовое значение (Понедельник – это 1) 1–7 Нет
День %w w День недели, числовое значение (Воскресенье – это 0) 0–6 Да
День   j День месяца, числовое значение, начальный нуль исключен 1–31 Нет
День   S Английский порядковый суффикс для дня месяца, текстовое значение «st», «th», «nd», «rd» Нет
Неделя %a D Сокращенное имя дня недели, текст для текущей локализации   Да
Неделя %A l Полное имя дня недели, текст для текущей локализации   Да
Неделя %U   Номер недели в году; числовое значение; первое воскресенье – это первый день первой недели 00–53 Да
Неделя %V W ISO 8601:1988 номер недели в году; числовое значение; неделя 1 – это первая неделя, в которой минимум 4 дня в текущем году; понедельник – это первый день недели 01–53 Нет
Неделя %W   Номер недели в году; числовое значение; первый понедельник – это первый день первой недели 00–53 Да
Месяц %B F Полное имя месяца, текст для текущей локализации   Да
Месяц %b M Сокращенное имя месяца, текст для текущей локализации   Да
Месяц %h   То же, что и %b   Нет
Месяц %m m Месяц, числовое значение 01–12 Да
Месяц   n Месяц, числовое значение, начальный нуль исключен 1–12 Нет
Месяц   t Длина месяца в днях, числовое значение 28, 29, 30, 31 Нет
Год %C   Век, числовое значение 00–99 Нет
Год %g   Такое же как %G, но без века 00–99 Нет
Год %G   ISO 8601 год с веком; числовое значение; год из четырех цифр, соответствующий неделе в формате ISO число; то же, что и %y, за исключением того, что если неделя в формате ISO относится к предыдущему или следующему году, то берется именно этот год   Нет
Год %y y Год без века, числовое значение 00–99 Да
Год %Y Y Год, числовое значение, включая век   Да
Год   L Флаг високосного года (True соответствует 1) 0, 1 Нет
Часовой пояс %z O Смещение от GMT в часах, +/−HHMM (т. е. –0400, +0230) −от 1200 до +1200 Да, но действует подобно %Z
Часовой пояс %Z T Часовой пояс, имя, или сокращение; текстовое значение   Да
Часовой пояс   I Флаг летнего времени (True соответствует 1) 0, 1 Нет
Часовой пояс   Z Смещение от GMT в секундах; на запад от GMT – отрицательное, на восток от GMT – положительное от −43200 до 43200 Нет
Составной %c   Стандартный формат даты и времени для местной локализации   Да
Составной %D   То же, что и %m/%d/%y   Нет
Составной %F   То же, что и %Y-%m-%d   Нет
Составной %r   Время в нотации AM или PM для местной локализации   Нет
Составной %R   Время в 24-часовой нотации для местной локализации   Нет
Составной %T   Время в 24-часовой нотации (то же, что и %H:%M:%S)   Нет
Составной %x   Стандартный формат даты для местной локализации (без времени)   Да
Compound %X   Стандартный формат времени для местной локализации (без даты)   Да
Составной   r Дата в формате RFC 822 (т. е. «Thu, 22 Aug 2002 16:01:07 +0200»)   Нет
Other %s U Секунды с начала эпохи   Нет
Other   B Новое универсальное время (Swatch Internet time)   Нет
Форматирование %%   Символьная константа %   Да
Форматирование %n   Символ новой строки   Нет
Форматирование %t   Символ табуляции   Нет

Первый аргумент каждой функции – это строка формата, а второй – метка времени. Если второй аргумент пропущен, то обе функции по умолчанию выводят текущие дату и время. Функции date() и strftime() работают с локальным временем, но каждая из них имеет своего UTC-двойника (gmdate() и gmstrftime() соответственно).

Символы форматирования функции date() уникальны для PHP, но функция strftime() использует функцию strftime() из библиотеки C и поэтому может оказаться более понятной тем, кто перешел на программирование в PHP с других языков, но в то же время, из-за этого ее поведение на разных платформах может несколько отличаться. Windows не поддерживает такое многообразие параметров функции strftime(), которое имеет большинство систем UNIX. Также функция strftime() предполагает, что каждый из ее символов форматирования начинается с символа % (вспомните функцию printf()), что упрощает выработку строки, включающей множество значений времени и даты.

Например, в 12:49 P.M. 15 июля 2002 года, код выдаст на печать:

It's after 12 pm on July 15, 2002

При этом применение функции strftime() может выглядеть следующим образом:

print strftime("It's after %I %P on %B %d, %Y");

А в случае применения функции date() это может выглядеть так:

print "It's after ".date('h a').' on '.date('F d, Y');

Не связанные с датой символы в строке формата хорошо подходят для функции strftime(), поскольку она ищет символ %, чтобы определить, куда вставить соответствующую информацию о времени. Однако функция date() не поддерживает такого ограничителя, поэтому единственное дополнение, которое можно вставить в строку форматирования, это символы пробела и пунктуации. Если вы передадите функции date() строку форматирования функции strftime():

print date("It's after %I %P on %B%d, %Y");

то, скорее всего, вам не понравится то, что вы получите:

131'44 pmf31eMon, 15 Jul 2002 12:49:44-0400 %1 %P o7 %742%15, %2002

Для получения с помощью функции date() частей времени, которые легко вставлять в строку, сгруппируйте все части времени и даты, полученные от функции date(), в одну строку, вставляя между отдельными компонентами ограничитель, который функция date() никуда не передает, и который сам не является частью ни одной из подстрок. Затем с помощью функции explode() с этим символом-ограничителем, поместите каждую часть возвращенного функцией date() значения в массив, который легко вставить в строку вывода:

$ar = explode(':',date("h a:F d, Y"));
print "It's after $ar[0] on $ar[1]";

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ