strftime

(PHP 4, PHP 5, PHP 7)

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

Описание

strftime ( string $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_OS03)) == '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 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 на данной странице.

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