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

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

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

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

Обсуждение
Функции date() и strftime() отличаются гибкостью и способны вырабатывать форматированную строку времени с множеством компонент. Перечислены символы форматирования, поддерживаемые этими функциями. В столбце Windows показано, поддерживает ли функция strftime() символ форматирования в системе Windows. Первый аргумент каждой функции – это строка формата, а второй – метка времени. Если второй аргумент пропущен, то обе функции по умолчанию выводят текущие дату и время. Функции 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]";

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Выделение дат и времен из строк
Выработка высокоточного времени
Определение дня недели, месяца, года или номера недели в году
Определение разности между датами юлианского календаря
Определение разности между двумя датами

Вернуться в раздел: PHP / 3. Дата и время