Форматирование текущей даты и времени в php
Содержание:
Вместо предисловия
Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров:
— элементарное добавление даты в запись БД;
— отображение времени;
— вывод дат в различном формате;
— проверка текущего времени на соответствие заданному таймеру;
— определение срока между 2-мя датами и так далее.
Чтобы работать со временем было удобно, у каждого языка программирования имеются специальные типы данных, позволяющие хранить соответствующие значения. Обычно речь идёт о числовом значении, как целом, так и с плавающей точкой.
В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.
Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:
<?php echo time();
На момент написания материала было 14 октября 2020 года, поэтому в терминале отобразилось следующее:
1602666005
Вы можете проверить вышеописанную команду и получить в PHP текущую дату и время самостоятельно, даже если не являетесь PHP-разработчиком — просто поместите код в любой онлайн-компилятор, вот один из многих. Так же рекомендуется делать и с остальным кодом — это поможет вам лучше понять работу описываемых в статье команд.
Но вернёмся к основной теме разговора. Благодаря коротенькому коду выше, мы получили от сервера текущее время — 1602666005 (у вас значение будет другим, ведь время не стоит на месте))).
Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.
Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.
Описание
date
Возвращает время, отформатированное в соответствии с аргументом
format, используя метку времени, заданную
аргументом timestamp или текущее системное
время, если timestamp не задан.
Другими словами, timestamp является
необязательным и по умолчанию равен значению, возвращаемому функцией
time().
Таблица 1. В параметре format распознаются
следующие символы
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
a | Ante meridiem или Post meridiem в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в стадарте Swatch Internet | От 000 до 999 |
c | Дата в формате ISO 8601 (добавлено в PHP 5) | 2004-02-12T15:19:21+00:00 |
d | День месяца, 2 цифры с ведущими нулями | от 01 до 31 |
D | Сокращенное наименование дня недели, 3 символа | от Mon до Sun |
F | Полное наименование месяца, например January или March | от January до December |
g | Часы в 12-часовом формате без ведущих нулей | От 1 до 12 |
G | Часы в 24-часовом формате без ведущих нулей | От до 23 |
h | Часы в 12-часовом формате с ведущими нулями | От 01 до 12 |
H | Часы в 24-часовом формате с ведущими нулями | От 00 до 23 |
i | Минуты с ведущими нулями | 00 to 59 |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, иначе otherwise. |
j | День месяца без ведущих нулей | От 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | От Sunday до Saturday |
L | Признак високосного года | 1, если год високосный, иначе . |
m | Порядковый номер месяца с ведущими нулями | От 01 до 12 |
M | Сокращенное наименование месяца, 3 символа | От Jan до Dec |
n | Порядковый номер месяца без ведущих нулей | От 1 до 12 |
O | Разница с временем по Гринвичу в часах | Например: +0200 |
r | Дата в формате RFC 2822 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
s | Секунды с ведущими нулями | От 00 до 59 |
S | Английский суффикс порядкового числительного дня месяца, 2 символа |
st, nd, rd или th. Применяется совместно с j |
t | Количество дней в месяце | От 28 до 31 |
T | Временная зона на сервере | Примеры: EST, MDT … |
U |
Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) |
См. также time() |
w | Порядковый номер дня недели | От (воскресенье) до 6 (суббота) |
W | Порядковый номер недели года по ISO-8601, первый день недели — понедельник (добавлено в PHP 4.1.0) | Например: 42 (42-я неделя года) |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2003 |
y | Номер года, 2 цифры | Примеры: 99, 03 |
z | Порядковый номер дня в году (нумерация с 0) | От до 365 |
Z |
Смещение временной зоны в секундах. Для временных зон западнее UTC это отрицательное число, восточнее UTC — положительное. |
От -43200 до 43200 |
Любые другие символы, встреченные в строке format,
будут выведены в результирующую строку без изменений.
Z всегда возвращает при
использовании gmdate().
Пример 1. Примеры использования функции date() |
Избежать распознавания символа как форматирующего можно, если экранировать
этот символ с помощью \ Если в сочетании с
\ символ являееся специальным (например,
\t), следует добавлять еще один
\.
Пример 2. Экранирование символов в функции date() |
Функции date() и
mktime() для вывода прошедших и будущих дат.
Пример 3. date() и mktime() example
|
Приведем еще несколько примеров использования функции
date(). Помните, что следует экранировать все
символы, которые вы хотите видеть в результате работы функции без
изменений. Это относится и к символам, которые в текущей версии PHP
не распознаются как специальные, так как этим символам может быть
назначено значение в следующих версиях.
Используйте одинарные кавычки для предотвращения преобразования
\n в перевод строки.
Пример 4. Форматирование с использованием date()
|
Для форматирования дат на других языках используйте функции
setlocale() и strftime().
См. также описание функций getlastmod(), gmdate(),
mktime(), strftime()
и time().
Функция date
Эта функция возвратит пользователю строку в форме даты/времени, сделав это в определённом формате. Формат этот определяет сам пользователь.
Синтаксис функции выглядит так:
date($format);
Видно, что формат указывается в качестве аргумента. Этим аргументом могут выступать самые разные символы, коих существует целая таблица:
Теперь давайте попробуем, как эта таблица работает на практике. Выведем текущий день недели:
<?php echo date("l");
У меня получился Wednesday, а вот что отобразится в консоли у вас, зависит от дня недели, в который вы напишете эту команду.
Теперь выведем дату в виде YYYY-ММ-DD:
<?php echo date('Y-m-d');
А потом и дату, и время:
<?php echo date('l jS \of F Y h:i:s A');
Конфигурация среды выполнения
Поведение этих функций зависит от настроек в PHP. ini:
Имя | Описание | По умолчанию | Версия PHP |
---|---|---|---|
date.timezone | Часовой пояс по умолчанию (используется всеми функциями даты и времени) | «» | PHP 5.1 |
date.default_latitude | Широта по умолчанию (используется date_sunrise() и date_sunset()) | «31.7667» | PHP 5.0 |
date.default_longitude | Долгота по умолчанию (используется date_sunrise() и date_sunset()) | «35.2333» | PHP 5.0 |
date.sunrise_zenith | По умолчанию Sunrise Zenith (используется date_sunrise() и date_sunset()) | «90.83» | PHP 5.0 |
date.sunset_zenith | По умолчанию закат Зенит (используется date_sunrise() и date_sunset()) | «90.83» | PHP 5.0 |
Деревянные
Модели идеально вписываются в дачный антураж. Все похвалы дереву как материалу относятся и к ним: экологичные, «теплые», гипоаллергенные, износостойкие, вкусно пахнут лесом.
Минусы вытекают из достоинств: горки из дерева рассыхаются, трескаются. Они боятся влаги. А если плохо обработаны, могут занозить пальчик.
Parameter Values
Parameter | Description |
---|---|
object | Required. Specifies a DateTime object returned by date_create() |
format | Required. Specifies the format for the date. The following characters can be used:
and the following predefined constants can also be used (available since PHP 5.1.0):
|
PHP 5 функции даты/времени
Функции | Описание |
---|---|
checkdate() | Проверяет дату григорианского |
date_add() | Добавление дней, месяцев, лет, часов, минут и секунд к дате |
date_create_from_format() | Возвращает новый объект DateTime, отформатированный в соответствии с заданным форматом |
date_create() | Возвращает новый объект DateTime |
date_date_set() | Устанавливает новую дату |
date_default_timezone_get() | Возвращает часовой пояс по умолчанию, используемый всеми функциями даты и времени |
date_default_timezone_set() | Задает часовой пояс по умолчанию, используемый всеми функциями даты и времени |
date_diff() | Возвращает разницу между двумя датами |
date_format() | Возвращает дату, отформатированную в соответствии с заданным форматом |
date_get_last_errors() | Возвращает предупреждения/ошибки, найденные в строке даты |
date_interval_create_from_date_string() | Устанавливает DateInterval из относительных частей строки |
date_interval_format() | Форматирует интервал |
date_isodate_set() | Задает дату ISO |
date_modify() | Изменяет метку времени |
date_offset_get() | Возвращает смещение часового пояса |
date_parse_from_format() | Возвращает ассоциативный массив с подробной информацией о заданной дате, в соответствии с заданным форматом |
date_parse() | Возвращает ассоциативный массив с подробной информацией о заданной дате |
date_sub() | Вычитает дни, месяцы, годы, часы, минуты и секунды с даты |
date_sun_info() | Возвращает массив, содержащий информацию о закате/восходе и сумерках начала/конца, в течение заданного дня и местоположения |
date_sunrise() | Возвращает время восхода на заданный день и местоположение |
date_sunset() | Возвращает время захода солнца для заданного дня и местоположения |
date_time_set() | Устанавливает время |
date_timestamp_get() | Возвращает метку времени Unix |
date_timestamp_set() | Устанавливает дату и время на основе отметки времени Unix |
date_timezone_get() | Возвращает часовой пояс заданного объекта DateTime |
date_timezone_set() | Задает часовой пояс для объекта DateTime |
date() | Форматирует локальную дату и время |
getdate() | Возвращает сведения о дате и времени отметки времени или текущей локальной даты/времени |
gettimeofday() | Возвращает текущее время |
gmdate() | Форматирует дату и время GMT/UTC |
gmmktime() | Возвращает метку времени Unix для даты GMT |
gmstrftime() | Форматирует дату и время GMT/UTC в соответствии с параметрами локали |
idate() | Форматирует локальное время/дату как целое число |
localtime() | Возвращает местное время |
microtime() | Возвращает текущую метку времени Unix с микросекундами |
mktime() | Возвращает метку времени Unix для даты |
strftime() | Форматирует локальное время и/или дату в соответствии с параметрами локали |
strptime() | Анализирует время/дату, сгенерированную с strftime () |
strtotime() | Анализирует английский текстовый DateTime в метку времени Unix |
time() | Возвращает текущее время в виде отметки времени Unix |
timezone_abbreviations_list() | Возвращает ассоциативный массив, содержащий DST, смещение и имя часового пояса |
timezone_identifiers_list() | Возвращает индексированный массив со всеми идентификаторами часовых поясов |
timezone_location_get() | Возвращает сведения о местоположении для заданного часового пояса |
timezone_name_from_ abbr() | Возвращает имя часового пояса из аббревиатуры |
timezone_name_get() | Возвращает имя часового пояса |
timezone_offset_get() | Возвращает смещение часового пояса от GMT |
timezone_open() | Создает новый объект объект класса DateTimeZone |
timezone_transitions_get() | Возвращает все переходы для часового пояса |
timezone_version_get() | Возвращает версию базы данных часового пояса |
Runtime Configuration
The behavior of these functions is affected by settings in php.ini:
Name | Description | Default | PHP Version |
---|---|---|---|
date.timezone | The default timezone (used by all date/time functions) | «» | PHP 5.1 |
date.default_latitude | The default latitude (used by date_sunrise() and date_sunset()) | «31.7667» | PHP 5.0 |
date.default_longitude | The default longitude (used by date_sunrise() and date_sunset()) | «35.2333» | PHP 5.0 |
date.sunrise_zenith | The default sunrise zenith (used by date_sunrise() and date_sunset()) | «90.83» | PHP 5.0 |
date.sunset_zenith | The default sunset zenith (used by date_sunrise() and date_sunset()) | «90.83» | PHP 5.0 |
PHP Predefined Date/Time Constants
Constant | Description |
---|---|
DATE_ATOM | Atom (example: 2019-01-18T14:13:03+00:00) |
DATE_COOKIE | HTTP Cookies (example: Fri, 18 Jan 2019 14:13:03 UTC) |
DATE_ISO8601 | ISO-8601 (example: 2019-01-18T14:13:03+0000) |
DATE_RFC822 | RFC 822 (example: Fri, 18 Jan 2019 14:13:03 +0000) |
DATE_RFC850 | RFC 850 (example: Friday, 18-Jan-19 14:13:03 UTC) |
DATE_RFC1036 | RFC 1036 (example: Friday, 18-Jan-19 14:13:03 +0000) |
DATE_RFC1123 | RFC 1123 (example: Fri, 18 Jan 2019 14:13:03 +0000) |
DATE_RFC2822 | RFC 2822 (example: Fri, 18 Jan 2019 14:13:03 +0000) |
DATE_RFC3339 | Same as DATE_ATOM (since PHP 5.1.3) |
DATE_RFC3339_EXTENDED | RFC3339 Extended format (since PHP 7.0.0) (example: 2019-01-18T16:34:01.000+00:00) |
DATE_RSS | RSS (Fri, 18 Jan 2019 14:13:03 +0000) |
DATE_W3C | World Wide Web Consortium (example: 2019-01-18T14:13:03+00:00) |
SUNFUNCS_RET_TIMESTAMP | Timestamp (since PHP 5.1.2) |
SUNFUNCS_RET_STRING | Hours:minutes (example: 09:41) (since PHP 5.1.2) |
SUNFUNCS_RET_DOUBLE | Hours as a floating point number (example: 9.75) (since PHP 5.1.2) |
❮ Previous
Next ❯
Получить простую дату
Обязательный параметр Format функции Date () указывает, как форматировать дату (или время).
Вот некоторые символы, которые обычно используются для дат:
- d — Представляет день месяца (от 01 до 31)
- m — Представляет месяц (от 01 до 12)
- Y — Представляет год (в четырех цифрах)
- l (строчная буква ‘ L ‘)-представляет день недели
Другие символы, такие как «/», «.» или «-«, также могут быть вставлены между символами для добавления дополнительного форматирования.
Приведенный ниже пример форматирует сегодняшнюю дату тремя различными способами:
Пример
<?phpecho «Today is » . date(«Y/m/d») . «<br>»;echo «Today is » . date(«Y.m.d») . «<br>»;echo «Today is » . date(«Y-m-d») . «<br>»;
echo «Today is » . date(«l»);?>
Описание time и mktime
Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.
Для начала займёмся её использованием вместе с меткой текущей даты:
<?php $now = time(); // метка echo $now; $nextWeek = time() + (7 * 24 * 60 * 60); // 7 дней; 24 ч.; 60 мин.; 60 сек. echo $nextWeek; // будет выведено что-то вроде 16026782231603283023
А теперь используем её же, но уже совместно с date(). Давайте выведем текущую дату двумя способами, а потом выведем дату, которая наступит через неделю:
<?php $now = time(); $nextWeek = time() + (7 * 24 * 60 * 60); // Первый способ вывода даты echo 'Сегодня: '. date('Y-m-d') ."\n"; // Второй способ вывода echo 'Сегодня: '. date('Y-m-d', $now) ."\n"; // Дата через неделю echo 'Через неделю будет: '. date('Y-m-d', $nextWeek) ."\n";
Теперь стоит поговорить о том, каким образом с функцией time используется mktime. Именно mktime возвращает метки времени Unix для даты, которую укажет пользователь.
Аргументы могут быть разные, а также опущены справа налево:
Лучше всего рассмотреть вышеописанное на примере. Давайте выведем в терминал:
— текущую полную дату и время (часы, минуты, секунды);
— время и дату завтрашнего дня;
— время и дату следующего месяца того же дня;
— ту же дату, но уже прошедшего года.
<?php // выводим текущую дату и время echo date("r"); // создание метки для завтрашнего дня $tomorrow = mktime(,,,date("m"),date("d")+1, date("Y")); echo date("r", $tomorrow); // создание метки для следующего месяца $nextmonth = mktime(,,,date("m")+1,date("d"), date("Y")); echo date("r", $nextmonth ); // метка для прошлого года $lastyear= mktime(,,,date("m")+1,date("d"), date("Y")-1); echo date("r", $lastyear);
На этом всё
Если интересуют более сложные и продвинутые знания по PHP, обратите внимание на соответствующий курс в OTUS!
По материалам статей:
— https://labs-org.ru/php-6/;
— https://space-base.ru/library/php/rabota-s-datoj-i-vremenem-v-php.
Parameter Values
Parameter | Description |
---|---|
format | Required. Specifies the format of the outputted date string. The following characters can be used:
and the following predefined constants can also be used (available since PHP 5.1.0):
|
timestamp | Optional. Specifies an integer Unix timestamp. Default is the current local time (time()) |