strftime
(PHP 4, PHP 5, PHP 7)
strftime — Форматирует текущую дату/время с учетом текущих настроек локали
Описание
$format
, int|null $timestamp
= null
) : string|falseФорматирует дату/время с учетом текущих настроек локали. Названия месяцев, дней недели и других языкозависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale().
Ваша C-библиотека может не поддерживать все форматирующие параметры, в этом случае
они будут недоступны функции strftime(). Кроме того, не все платформы
поддерживают отрицательные метки времени, так что поддерживаемый диапазон дат на этих
платформах будет ограничен эпохой Unix. Это значит, что %e, %T, %R и %D (а возможно и
другие параметры), как и даты до Jan 1, 1970
, не поддерживаются
Windows, некоторыми версиями Linux и некоторыми другими операционными системами.
Список форматирующих символов, поддерживаемых Windows, можно найти на
» сайте MSDN.
Список параметров
-
format
-
Распознаются следующие символы в строке format
format
Описание Пример возвращаемых значений День --- --- %a
Сокращенное название дня недели От Sun
доSat
%A
Полное название дня недели От Sunday
доSaturday
%d
Двухзначное представление дня месяца (с ведущими нулями) От 01
до31
%e
День месяца, с ведущим пробелом, если он состоит из одной цифры. На Windows реализован не так, как описано. Подробнее смотрите ниже. От 1
до31
%j
Порядковый номер в году, 3 цифры с ведущими нулями От 001
до366
%u
Порядковый номер дня недели согласно стандарту ISO-8601 От 1
(понедельник) до7
(воскресенье)%w
Порядковый номер дня недели От 0
(воскресенье) до6
(суббота)Неделя --- --- %U
Порядковый номер недели в указанном году, начиная с первого воскресенья в качестве первой недели 13
(для полной 13-й недели года)%V
Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника От 01
до53
(где 53 указывает на перекрывающуюся неделю)%W
Порядковый номер недели в указанном году, начиная с первого понедельника в качестве первой недели 46
(для 46-й недели года, начинающейся с понедельника)Месяц --- --- %b
Аббревиатура названия месяца, в соответствии с настройками локали От Jan
доDec
%B
Полное название месяца, в соответствии с настройками локали От January
доDecember
%h
Аббревиатура названия месяца, в соответствии с настройками локали (псевдоним %b) От Jan
доDec
%m
Двухзначный порядковый номер месяца От 01
(январь) до12
(декабрь)Год --- --- %C
Двухзначный порядковый номер столетия (год, деленный на 100, усеченный до целого) 19
для 20-го века%g
Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V) Пример: 09
для недели 6 января 2009%G
Полная четырехзначная версия %g Пример: 2009
для недели 3 января 2009%y
Двухзначный порядковый номер года Пример: 09
для 2009,79
для 1979%Y
Четырехзначный номер года Пример: 2038
Время --- --- %H
Двухзначный номер часа в 24-часовом формате От 00
до23
%k
Часы в 24-часовом формате, с пробелом перед одиночной цифрой От 0
до23
%I
Двухзначный номер часа в 12-часовом формате От 01
до12
%l (строчная 'L')
Час в 12-часовом формате, с пробелом перед одиночной цифрой От 1
до12
%M
Двухзначный номер минуты От 00
до59
%p
'AM' или 'PM' в верхнем регистре, в зависимости от указанного времени Пример: AM
для 00:31,PM
для 22:23%P
'am' или 'pm' в зависимости от указанного времени Пример: am
для 00:31,pm
для 22:23%r
То же что и "%I:%M:%S %p" Пример: 09:34:17 PM
для 21:34:17%R
То же что и "%H:%M" Пример: 00:35
для 12:35 AM,16:44
для 4:44 PM%S
Двухзначный номер секунды От 00
до59
%T
То же что и "%H:%M:%S" Пример: 21:34:17
для 09:34:17 PM%X
Предпочитаемое отображение времени в зависимости от локали, без даты Пример: 03:59:16
или15:59:16
%z
Смещение временной зоны относительно UTC. Не реализовано в Windows, подробности см. ниже. Пример: -0500
для US Eastern Time%Z
Аббревиатура временной зоны. Не реализовано в Windows, подробности см. ниже. Пример: EST
для Eastern TimeМетки даты и времени --- --- %c
Предпочитаемое отображение даты и времени, в зависимости от текущей локали Пример: Tue Feb 5 00:45:10 2009
для 5 февраля 2009 00:45:10%D
То же что и "%m/%d/%y" Пример: 02/05/09
для 5 февраля 2009%F
То же что и "%Y-%m-%d" (обычно используется в метках времени баз данных) Пример: 2009-02-05
для 5 февраля 2009%s
Метка времени Эпохи Unix (то же что и функция time()) Пример: 305815200
для 10 сентября 1979 08:40:00%x
Предпочитаемое отображение даты, без времени Пример: 02/05/09
для 5 февраля 2009Различное --- --- %n
Символ перевода строки ("\n") --- %t
Символ табуляции ("\t") --- %%
Символ процента ("%") --- ВниманиеВ отличие от ISO-9899:1999, в Sun Solaris воскресенью присваивается номер 1. Как результат,
%u
может работать не так, как описано в этом руководстве.ВниманиеТолько для Windows:
Модификатор
%e
не поддерживается в реализации этой функции в Windows. Для использования этого значения необходимо вместо него использовать модификатор%#d
. Пример ниже иллюстрирует кроссплатформенно совместимую функцию.Модификаторы
%z
и%Z
возвращают название временной зоны вместо смещения или аббревиатуры.ВниманиеТолько для macOS: модификатор
%P
не поддерживается в реализации этой функции в macOS. -
timestamp
-
Необязательный параметр
timestamp
представляет собой метку времени типа int, по умолчанию равную текущему локальному времени, еслиtimestamp
не указан илиnull
. Другими словами, значение по умолчанию равно результату функции time().
Возвращаемые значения
Возвращает строку, отформатированную в соответствии с параметром
format
, используя указанную временную метку
timestamp
или текущее время, если метка не
была указана. Названия месяцев, дней недели и других языкозависимых
строк будут взяты в соответствии с текущими настройками локали,
установленной с помощью функции setlocale().
Функция возвращает false
если параметр format
пустой,
содержит неподдерживаемые спецификаторы преобразования или если длина возвращаемой
строки будет больше 4095
.
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE
,
и/или ошибку уровня E_STRICT
или E_WARNING
при использовании системных
настроек или переменной окружения TZ. Смотрите также date_default_timezone_set()
Из-за того, что результат данной функции зависит от используемой
в операционной системе C-библиотеки, некоторые модификаторы могут
не поддерживаться. Передача неизвестного модификатора в функцию в
Windows выдаст 5 предупреждений E_WARNING
и вернет false
. На других операционных системах вы можете не
получить никаких предупреждений E_WARNING
,
а вывод может содержать модификаторы без преобразований.
Список изменений
Версия | Описание |
---|---|
8.0.0 |
timestamp теперь допускает значение null.
|
Примеры
Этот пример будет работать, если на вашей системе установлены соответствующие локали.
Пример #1 Пример использования функции strftime() с разными локалями
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" по-фински - %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" по-французски - %A и");
setlocale(LC_TIME, "de_DE");
echo strftime(" по-немецки - %A.\n");
?>
Пример #2 Пример номеров недели по ISO 8601:1988
<?php
/* Декабрь 2002 / Январь 2003
ISOнед Пн Вт Ср Чт Пт Сб Вс
----- ----------------------------
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */
// Вывод: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/28/2002")) . "\n";
// Вывод: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/30/2002")) . "\n";
// Вывод: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";
// Вывод: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";
/* Декабрь 2004 / Январь 2005
ISOнед Пн Вт Ср Чт Пт Сб Вс
----- ----------------------------
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */
// Вывод: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";
// Вывод: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";
// Вывод: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";
// Вывод: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";
?>
Пример #3 Кроссплатформенный пример использования модификатора %e
<?php
// 1 января: выдает результат: '%e%1%' (%%, e, %%, %e, %%)
$format = '%%e%%%e%%';
// Проверяем наличие Windows и соответственно заменяем модификатор %e
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
}
echo strftime($format);
?>
Пример #4 Показываем все известные и неизвестные форматы.
<?php
// Описание форматов.
$strftimeFormats = array(
'A' => 'Полное название дня',
'B' => 'Полное имя месяца, в зависимости от локали',
'C' => 'Двухзначный номер столетия (год, деленный на 100, усеченный до целого)',
'D' => 'Тоже что и "%m/%d/%y"',
'E' => '',
'F' => 'Тоже что и "%Y-%m-%d"',
'G' => 'Четырехзначная версия %g',
'H' => 'Двухзначный номер часа в 24-часовом формате',
'I' => 'Двухзначный номер часа в 12-часовом формате',
'J' => '',
'K' => '',
'L' => '',
'M' => 'Двухзначный номер минуты',
'N' => '',
'O' => '',
'P' => '"am" или "pm" в зависимости от текущего времени, в нижнем регистре',
'Q' => '',
'R' => 'Тоже что и "%H:%M"',
'S' => 'Двухзначный номер секунды',
'T' => 'Тоже что и "%H:%M:%S"',
'U' => 'Номер недели указанного года, начиная с первого воскресенья в качестве первой недели',
'V' => 'Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника',
'W' => 'Номер недели указанного года, начиная с первого понедельника в качестве первой недели',
'X' => 'Предпочитаемое отображение времени в зависимости от локали, без даты',
'Y' => 'Четырехзначный номер года',
'Z' => 'Смещение временной зоны/аббревиатура, НЕ выдаваемая %z (зависит от операционной системы)',
'a' => 'Сокращенное название дня недели',
'b' => 'Сокращенное название месяца в зависимости от локали',
'c' => 'Предпочитаемое отображение даты и времени в зависимости от локали',
'd' => 'Двухзначный номер дня месяца (с ведущими нулями)',
'e' => 'День месяца, с ведущим пробелом, если он состоит из одной цифры',
'f' => '',
'g' => 'Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V)',
'h' => 'Сокращенное название месяца в зависимости от локали (псевдоним %b)',
'i' => '',
'j' => 'Номер дня в году, 3 цифры с ведущими нулями',
'k' => 'Час в 24-часовом формате, с ведущим пробелом перед одиночной цифрой',
'l' => 'Номер часа в 12-часовом формате, с ведущим пробелом, если он состоит из одной цифры',
'm' => 'Двухзначный номер месяца',
'n' => 'Символ новой строки ("\n")',
'o' => '',
'p' => '"AM" или "PM" в зависимости от указанного времени, в верхнем регистре',
'q' => '',
'r' => 'Тоже что и "%I:%M:%S %p"',
's' => 'Временная метка Эпохи Unix',
't' => 'Символ табуляции ("\t")',
'u' => 'Номер дня недели в соответствии со стандартом ISO-8601',
'v' => '',
'w' => 'Номер дня недели',
'x' => 'Предпочитаемое отображение даты в зависимости от локали, без времени',
'y' => 'Двухзначный номер года',
'z' => 'Смещение временной зоны относительно UTC или аббревиатура (зависит от операционной системы)',
'%' => 'Символ процента ("%")',
);
// Результаты.
$strftimeValues = array();
// Обрабатываем форматы и подавляем любые ошибки.
foreach($strftimeFormats as $format => $description){
if (False !== ($value = @strftime("%{$format}"))){
$strftimeValues[$format] = $value;
}
}
// Находим самое длинное значение
$maxValueLength = 2 + max(array_map('strlen', $strftimeValues));
// Отображаем известные форматы.
foreach($strftimeValues as $format => $value){
echo "Известный формат : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}
// Отображаем неизвестные форматы.
foreach(array_diff_key($strftimeFormats, $strftimeValues) as $format => $description){
echo "Неизвестный формат : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n";
}
?>
Результатом выполнения данного примера будет что-то подобное:
Известный формат : 'A' = 'Friday' ( Полное название дня ) Известный формат : 'B' = 'December' ( Полное имя месяца, в зависимости от локали ) Известный формат : 'H' = '11' ( Двухзначный номер часа в 24-часовом формате ) Известный формат : 'I' = '11' ( Двухзначный номер часа в 12-часовом формате ) Известный формат : 'M' = '24' ( Двухзначный номер минуты ) Известный формат : 'S' = '44' ( Двухзначный номер секунды ) Известный формат : 'U' = '48' ( Номер недели указанного года, начиная с первого воскресенья в качестве первой недели ) Известный формат : 'W' = '48' ( Номер недели указанного года, начиная с первого понедельника в качестве первой недели ) Известный формат : 'X' = '11:24:44' ( Предпочитаемое отображение времени в зависимости от локали, без даты ) Известный формат : 'Y' = '2010' ( Четырехзначный номер года ) Известный формат : 'Z' = 'GMT Standard Time' ( Смещение временной зоны/аббревиатура, НЕ выдаваемая %z (зависит от операционной системы) ) Известный формат : 'a' = 'Fri' ( Сокращенное название дня недели ) Известный формат : 'b' = 'Dec' ( Сокращенное название месяца в зависимости от локали ) Известный формат : 'c' = '12/03/10 11:24:44' ( Предпочитаемое отображение даты и времени в зависимости от локали ) Известный формат : 'd' = '03' ( Двухзначный номер дня месяца (с ведущими нулями) ) Известный формат : 'j' = '337' ( Номер дня в году, 3 цифры с ведущими нулями ) Известный формат : 'm' = '12' ( Двухзначный номер месяца ) Известный формат : 'p' = 'AM' ( "AM" или "PM" в зависимости от указанного времени, в верхнем регистре ) Известный формат : 'w' = '5' ( Номер дня недели ) Известный формат : 'x' = '12/03/10' ( Предпочитаемое отображение даты в зависимости от локали, без времени ) Известный формат : 'y' = '10' ( Двухзначный номер года ) Известный формат : 'z' = 'GMT Standard Time' ( Смещение временной зоны относительно UTC или аббревиатура (зависит от операционной системы) ) Известный формат : '%' = '%' ( Символ процента ("%") ) Неизвестный формат : 'C' ( Двухзначный номер столетия (год, деленный на 100, усеченный до целого) ) Неизвестный формат : 'D' ( Тоже что и "%m/%d/%y" ) Неизвестный формат : 'E' Неизвестный формат : 'F' ( Тоже что и "%Y-%m-%d" ) Неизвестный формат : 'G' ( Четырехзначная версия %g ) Неизвестный формат : 'J' Неизвестный формат : 'K' Неизвестный формат : 'L' Неизвестный формат : 'N' Неизвестный формат : 'O' Неизвестный формат : 'P' ( "am" или "pm" в зависимости от текущего времени, в нижнем регистре ) Неизвестный формат : 'Q' Неизвестный формат : 'R' ( Тоже что и "%H:%M" ) Неизвестный формат : 'T' ( Тоже что и "%H:%M:%S" ) Неизвестный формат : 'V' ( Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника ) Неизвестный формат : 'e' ( День месяца, с ведущим пробелом, если он состоит из одной цифры ) Неизвестный формат : 'f' Неизвестный формат : 'g' ( Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V) ) Неизвестный формат : 'h' ( Сокращенное название месяца в зависимости от локали (псевдоним %b) ) Неизвестный формат : 'i' Неизвестный формат : 'k' ( Номер часа в 24-часовом формате, с ведущим пробелом, если он состоит из одной цифры ) Неизвестный формат : 'l' ( Номер часа в 12-часовом формате, с ведущим пробелом, если он состоит из одной цифры ) Неизвестный формат : 'n' ( Символ новой строки ("\n") ) Неизвестный формат : 'o' Неизвестный формат : 'q' Неизвестный формат : 'r' ( Тоже что и "%I:%M:%S %p" ) Неизвестный формат : 's' ( Временная метка Эпохи Unix ) Неизвестный формат : 't' ( Символ табуляции ("\t") ) Неизвестный формат : 'u' ( Номер дня недели в соответствии со стандартом ISO-8601 ) Неизвестный формат : 'v'
Примечания
Замечание: Использование параметров %G и %V, основанных на днях недели формата ISO 8601:1988, могут давать неожиданные (хотя и корректные) результаты при неполном понимании данной системы нумерации. Смотрите примеры параметра %V на данной странице.
Смотрите также
- » Онлайн-утилита составления времени в формате strftime()
- setlocale() - Устанавливает настройки локали
- mktime() - Возвращает метку времени Unix для заданной даты
- strptime() - Разбирает строку даты/времени, сгенерированную функцией strftime
- gmstrftime() - Форматирует дату/время по Гринвичу с учетом текущей локали
- » Спецификация Open Group функции strftime()