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 -
Распознаются следующие символы в строке formatformatОписание Пример возвращаемых значений День --- --- %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()