strftime Форматирует местную дату и время с учётом языковых настроек &warn.deprecated.function-8-1-0.alternatives; date IntlDateFormatter::format &reftitle.description; stringfalsestrftime stringformat intnulltimestamp&null; Функция форматирует дату и время с учётом локали. Названия месяцев и дней недели, а также другие строки, которые зависят от языка, будут соответствовать текущим языковым настройкам, которые установили функцией setlocale. Текущая библиотека языка C не всегда поддерживает каждый спецификатор преобразования, и тогда функция strftime тоже не будет поддерживать каждый спецификатор. Кроме того, не каждая платформа поддерживает отрицательные метки времени, поэтому диапазон дат иногда ограничивается эпохой Unix. Это означает, что спецификаторы %e, %T, %R и %D (и, возможно, другие), как и даты до 1 января 1970, не поддерживаются ОС Windows, отдельными версиями систем Linux и рядом других операционных системам. Список спецификаторов преобразования для Windows-систем даёт страница на сайте MSDN. Вместо этой функции вызывают метод IntlDateFormatter::format. &reftitle.parameters; format Строка параметра <parameter>format</parameter> распознаёт следующие символы Параметр 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; Этот пример будет работать в системах с языковыми настройками, которые соответствуют модификаторам. Пример использования функции <function>strftime</function> с разными языковыми настройками ]]> Пример номеров недели по стандарту ISO 8601:1988 ]]> Пример кроссплатформенной совместимости модификатора <literal>%e</literal> ]]> Отображение каждого известного и неизвестного формата 'Полное название дня недели', '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::format DateTimeInterface::format Онлайн-утилита составления времени в формате функции strftime() setlocale mktime strptime gmstrftime Спецификация консорциума Open Group для функции strftime