You can call it a loophole or a fun fact but this is weird (why it is not handled by PHP):
<?php
echo date('Fred') ;
Output: MayFri, 05 May 2023 07:03:16 +0200Europe/Amsterdam05
Output URL: https://3v4l.org/TqFIJ
(PHP 4, PHP 5, PHP 7, PHP 8)
date — Форматирует временную метку Unix
$format
, ?int $timestamp
= null
): string
Возвращает строку, отформатированную в соответствии с указанным в параметре format
шаблоном. Используется метка времени, заданная параметром
timestamp
(метка времени Unix), или текущее системное время, если
параметр timestamp
не задан. Таким образом,
параметр timestamp
является необязательным и по умолчанию равен
значению, возвращаемому функцией time().
Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.
format
Принятый формат DateTimeInterface::format().
Замечание: Функция date() всегда будет генерировать
000000
в качестве микросекунд, поскольку она принимает параметр int, тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.
timestamp
Необязательный параметр timestamp
представляет собой
метку времени типа int, по умолчанию равную текущему локальному времени, если timestamp
не указан или null
. Другими словами, значение по умолчанию равно результату функции time().
Возвращает отформатированную строку с датой.
Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING
,
если часовой пояс некорректный. Смотрите также date_default_timezone_set()
Версия | Описание |
---|---|
8.0.0 |
timestamp теперь допускает значение null.
|
Пример #1 Примеры использования функции date()
<?php
// установка часового пояса по умолчанию.
date_default_timezone_set('UTC');
// выведет примерно следующее: Monday
echo date("l");
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');
// выведет: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);
// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
<?php
// выведет примерно следующее: Wednesday the 15th
echo date('l \t\h\e jS');
?>
Для вывода прошедших и будущих дат удобно использовать функции date() и mktime().
Пример #3 Пример совместного использования функций date() и mktime()
<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>
Замечание:
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Ещё несколько примеров использования функции date(). Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.
Пример #4 Форматирование с использованием date()
<?php
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$today = date("H:i:s"); // 17:16:18
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format().
Замечание:
Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime(). Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).
Временную метку начала запроса можно получить из поля $_SERVER['REQUEST_TIME'].
You can call it a loophole or a fun fact but this is weird (why it is not handled by PHP):
<?php
echo date('Fred') ;
Output: MayFri, 05 May 2023 07:03:16 +0200Europe/Amsterdam05
Output URL: https://3v4l.org/TqFIJ
php 7 allows date($format, "12345678")
php 8 throws fatal error because it no longer auto-cast "1234567" as int.
change it to date($format, (int)"12345678") to fix it for php 8.