strftime

(PHP 4, PHP 5, PHP 7, PHP 8)

strftimeФорматирует текущую дату/время с учётом текущих настроек локали

Внимание

Функция объявлена УСТАРЕВШЕЙ в PHP 8.1.0. Полагаться на эту функцию крайне не рекомендуется.

Есть следующие альтернативы:

Описание

strftime(string$format, ?int$timestamp = null): string|false

Форматирует дату/время с учётом текущих настроек локали. Названия месяцев, дней недели и других языкозависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale().

Внимание

Ваша C-библиотека может не поддерживать все форматирующие параметры, в этом случае они будут недоступны функции strftime(). Кроме того, не все платформы поддерживают отрицательные метки времени, так что поддерживаемый диапазон дат на этих платформах будет ограничен эпохой Unix. Это значит, что %e, %T, %R и %D (а возможно и другие параметры), как и даты до Jan 1, 1970, не поддерживаются Windows, некоторыми версиями Linux и некоторыми другими операционными системами. Список форматирующих символов, поддерживаемых Windows, можно найти на » сайте MSDN. Используйте вместо этого метод IntlDateFormatter::format().

Список параметров

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. Точный результат зависит от операционной системы, также могут возвращаться варианты в нижнем регистре или варианты с точками (например, 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 воскресенью присваивается номер 1. Как результат, %u может работать не так, как описано в этом руководстве.

Внимание

Только для Windows:

Модификатор %e не поддерживается в реализации этой функции в Windows. Для использования этого значения необходимо вместо него использовать модификатор %#d. Пример ниже иллюстрирует кроссплатформенно совместимую функцию.

Модификаторы %z и %Z возвращают название часового пояса вместо смещения или аббревиатуры.

Внимание

Только для macOS и Musl: модификатор %P не поддерживается в реализации этой функции в macOS.

timestamp

Необязательный параметр timestamp — это целочисленная (int) метка времени, по умолчанию равная текущему местному времени, если параметр timestamp не указан или равен null. Говоря по другому, значение по умолчанию равно результату функции time().

Возвращаемые значения

Возвращает строку, отформатированную в соответствии с параметром format, используя указанную временную метку timestamp или текущее время, если метка не была указана. Названия месяцев, дней недели и других языкозависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale(). Функция возвращает false если параметр format пустой, содержит неподдерживаемые спецификаторы преобразования или если длина возвращаемой строки будет больше 4095.

Ошибки

Каждый вызов к функциям даты и времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING, если часовой пояс некорректный. Смотрите также описание функции date_default_timezone_set().

Из-за того, что результат данной функции зависит от используемой в операционной системе C-библиотеки, некоторые модификаторы могут не поддерживаться. Передача неизвестного модификатора в функцию в Windows выдаст 5 предупреждений E_WARNING и вернёт false. На других операционных системах вы можете не получить никаких предупреждений E_WARNING, а вывод может содержать модификаторы без преобразований.

Список изменений

ВерсияОписание
8.0.0timestamp теперь допускает значение 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


// Вывод: 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";





// Вывод: 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 на данной странице.

Смотрите также

To Top