strftimeФорматирует местную дату и время с учётом языковых настроек
&warn.deprecated.function-8-1-0.alternatives;
dateIntlDateFormatter::format
&reftitle.description;
stringfalsestrftimestringformatintnulltimestamp&null;
Функция форматирует дату и время с учётом локали. Названия месяцев и дней недели,
а также другие строки, которые зависят от языка, будут соответствовать текущим языковым настройкам,
которые установили функцией setlocale.
Текущая библиотека языка C не всегда поддерживает каждый спецификатор преобразования,
и тогда функция strftime тоже не будет поддерживать каждый спецификатор.
Кроме того, не каждая платформа поддерживает отрицательные метки времени, поэтому диапазон дат
иногда ограничивается эпохой Unix. Это означает, что спецификаторы %e, %T, %R и %D (и, возможно,
другие), как и даты до 1 января 1970, не поддерживаются
ОС Windows, отдельными версиями систем Linux и рядом других операционных системам.
Список спецификаторов преобразования для Windows-систем даёт страница
на сайте MSDN.
Вместо этой функции вызывают метод IntlDateFormatter::format.
&reftitle.parameters;
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Полная 4-значная версия представления модификатора %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.
Точный результат зависит от операционной системы,
которые иногда возвращают варианты в нижнем регистре
или варианты с точками (например, a.m.)
%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 отсчёт числового представления дня недели начинается
с воскресенья. Поэтому модификатор %u иногда работает не так, как описывает руководство.
Только для Windows:
Модификатор %e не поддерживается в Windows-реализации
функции. Значение получают через модификатор %#d.
Пример на этой странице показывает, как написать кроссплатформенно-совместимую функцию.
Модификаторы %z и %Z возвращают
название часового пояса вместо смещения или аббревиатуры.
Только для macOS и стандартной библиотеки musl языка C: модификатор %P
не поддерживается в реализации этой функции в macOS.
&date.timestamp.description;
&reftitle.returnvalues;
Функция возвращает строковое представление
метки времени timestamp или местного времени, если метку
не указали, которые отформатировала по условиям параметра format.
Названия месяцев и дней недели, а также другие строки, которые зависят от языка,
будут соответствовать текущей локали,
которую установили функцией setlocale.
Функция возвращает &false;, если параметр format пуст,
содержит неподдерживаемые спецификаторы преобразования или если длина возвращаемой
строки превысит значение 4095.
&reftitle.errors;
&date.timezone.errors.description;
Поскольку вывод зависит от текущей библиотеки
языка C, отдельные спецификаторы преобразования поддерживаются не всегда.
В ОС Windows функция выдаст 5 сообщений об ошибках уровня E_WARNING
и вернёт &false; при передаче неизвестных спецификаторов преобразования.
В других операционных системах функция не всегда выдаёт сообщения об ошибках уровня E_WARNING,
а вывод иногда содержит модификаторы без преобразования.
&reftitle.changelog;
&Version;&Description;8.0.0
Параметр timestamp теперь принимает значение null.
&reftitle.examples;
Этот пример будет работать в системах с языковыми настройками,
которые соответствуют модификаторам.
Пример использования функции strftime с разными языковыми настройками
]]>
Пример номеров недели по стандарту ISO 8601:1988
]]>
Пример кроссплатформенной совместимости модификатора %e
]]>
Отображение каждого известного и неизвестного формата
'Полное название дня недели',
'B' => 'Полное название месяца на основе локали',
'C' => 'Двузначное представление столетия (год, разделённый на 100 и усечённый до целого числа)',
'D' => 'То же, что и "%m/%d/%y"',
'E' => '',
'F' => 'То же, что и "%Y-%m-%d"',
'G' => 'Полная 4-значная версия модификатора %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";
}
?>
]]>
&example.outputs.similar;
&reftitle.notes;
Модификаторы %G и %V, работа которых основана на днях недели
по стандарту ISO 8601:1988, иногда дают неожиданные (хотя
и правильные) результаты, если функция не до конца понимает систему нумерации.
Смотрите примеры с модификатором %V на этой странице руководства.
&reftitle.seealso;
IntlDateFormatter::formatDateTimeInterface::format
Онлайн-утилита составления времени в формате функции strftime()
setlocalemktimestrptimegmstrftime
Спецификация консорциума Open Group для функции strftime