День | — | — |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
D | Текстовое представление дня недели, 3 символа | от Mon до Sun |
j | День месяца без ведущего нуля | от 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели в соответствии со стандартом ISO 8601 | от 1 (понедельник) до 7 (воскресенье) |
S | st , nd , rd или th . Применяется совместно с j | |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | — | — |
W | Например: 42 (42-я неделя года) | |
Месяц | — | — |
F | Полное наименование месяца, например, January или March | от January до December |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
M | Сокращённое наименование месяца, 3 символа | от Jan до Dec |
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | — | — |
L | Признак високосного года | 1 , если год високосный, иначе 0 . |
o | Номер года в соответствии со стандартом ISO 8601. Имеет то же значение, что и Y , кроме случая, когда номер недели ISO
(W ) принадлежит предыдущему или следующему году; тогда
будет использован год этой недели. | Примеры: 1999 или 2003 |
X | Расширенное полное числовое представление года,
не менее 4 цифр, с - для годов до нашей эры
и + для годов нашей эры. | Примеры: -0055 +0787 , +1999 , +10191 |
x | Расширенное полное числовое представление, если требуется
или стандартное полное числовое представление,
если возможно (например, Y ). Не менее четырёх цифр.
Для годов до нашей эры указан префикс - .
У годов после (и включая) 10000 префикс + . | Примеры: -0055 , 0787 , 1999 , +10191 |
Y | Полное числовое представление года, не менее 4 цифр, с - для годов до нашей эры. | Примеры: -0055 , 0787 , 1999 , 2003 , 10191 . |
y | Номер года, 2 цифры | Примеры: 99 , 03 |
Время | — | — |
a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или
|
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в формате Интернет-времени (альтернативной системы отсчёта времени суток) | от 000 до 999 |
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
u | Микросекунды.000000 , т.к. она принимает целочисленный (int)
параметр, тогда как DateTime::format() поддерживает
микросекунды, если DateTime создан с ними. | Например: 654321 |
v | Миллисекунды. Замечание такое же как и для u . | Пример: 654 |
Часовой пояс | — | — |
e | Идентификатор часового пояса | Примеры: UTC , GMT , Atlantic/Azores |
I (заглавная i) | Признак летнего времени | 1 , если дата соответствует летнему времени, 0 в противном случае. |
O | Разница с временем по Гринвичу без двоеточия между часами и минутами | Например: +0200 |
P | Разница с временем по Гринвичу с двоеточием между часами и минутами | Например: +02:00 |
p | То же, что и P , но возвращает Z вместо +00:00 (доступен, начиная с PHP 8. 0.0) | Например: +02:00 |
T | Аббревиатура часового пояса, если известна; в противном случае смещение по Гринвичу. | Примеры: EST , MDT , +05 |
Z | Смещение часового пояса в секундах. Для часовых поясов, расположенных западнее UTC, возвращаются отрицательные числа, а для расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 222/» RFC 5322 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT) | Смотрите также time() |
День | — | — |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
D | Текстовое представление дня недели, 3 символа | от Mon до Sun |
j | День месяца без ведущего нуля | от 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5. 1.0) | от 1 (понедельник) до 7 (воскресенье) |
S | Английский суффикс порядкового числительного дня месяца, 2 символа | st, nd, rd или th. Применяется совместно с j |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | — | — |
W | Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) | Например: 42 (42-я неделя года) |
Месяц | — | — |
F | Полное наименование месяца, например January или March | от January до December |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
M | Сокращенное наименование месяца, 3 символа | от Jan до Dec |
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | — | — |
L | Признак високосного года | 1, если год високосный, иначе 0. |
o | Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) | Примеры: 1999 или 2003 |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2003 |
y | Номер года, 2 цифры | Примеры: 99, 03 |
Время | — | — |
a | Ante meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в формате Интернет-времени (альтернативной системы отсчета времени суток) | от 000 до 999 |
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
u | Микросекунды (добавлено в версии PHP 5. 2.2). Учтите, что date() всегда будет возвращать 000000, т.к. она принимает целочисленный (integer) параметр, тогда как DateTime::format() поддерживает микросекунды. | Например: 654321 |
Временная зона | — | — |
e | Код шкалы временной зоны(добавлен в версии PHP 5.1.0) | Примеры: UTC, GMT, Atlantic/Azores |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, 0 в противном случае. |
O | Разница с временем по Гринвичу, в часах | Например: +0200 |
P | Разница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5. 1.3) | Например: +02:00 |
T | Аббревиатура временной зоны | Примеры: EST, MDT … |
Z | Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 (добавлено в PHP 5) | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 2822 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) | Смотрите также time() |
День | — | — |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
D | Текстовое представление дня недели, 3 символа | от Mon до Sun |
j | День месяца без ведущего нуля | от 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) | от 1 (понедельник) до 7 (воскресенье) |
S | Английский суффикс порядкового числительного дня месяца, 2 символа | st, nd, rd или th. Применяется совместно с j |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | — | — |
W | Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) | Например: 42 (42-я неделя года) |
Месяц | — | — |
F | Полное наименование месяца, например January или March | от January до December |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
M | Сокращенное наименование месяца, 3 символа | от Jan до Dec |
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | — | — |
L | Признак високосного года | 1, если год високосный, иначе 0. |
o | Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) | Примеры: 1999 или 2003 |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2003 |
y | Номер года, 2 цифры | Примеры: 99, 03 |
Время | — | — |
a | Ante meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в формате Интернет-времени (альтернативной системы отсчета времени суток) | от 000 до 999 |
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
u | Микросекунды (добавлено в версии PHP 5. 2.2). Учтите, что date() всегда будет возвращать 000000, т.к. она принимает целочисленный (integer) параметр, тогда как DateTime::format() поддерживает микросекунды. | Например: 654321 |
Временная зона | — | — |
e | Код шкалы временной зоны(добавлен в версии PHP 5.1.0) | Примеры: UTC, GMT, Atlantic/Azores |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, 0 в противном случае. |
O | Разница с временем по Гринвичу, в часах | Например: +0200 |
P | Разница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5. 1.3) | Например: +02:00 |
T | Аббревиатура временной зоны | Примеры: EST, MDT … |
Z | Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 (добавлено в PHP 5) | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 2822 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) | Смотрите также time() |
Уроки PHP – получение и вывод даты и времени
Сегодняшняя статья посвящена рассмотрению того, как на практике использовать функции по получению даты и времени в PHP, а также обзору способов вывода и форматирования даты и времени.
Основные моменты для дат и времени в PHP
Функции, которые обрабатывают дату и время в PHP, позволяют получать дату и время с того сервера, на котором выполняется скрипт. Также они позволяют манипулировать, редактировать, форматировать эти значения перед их отображением на экран (выводом). Сегодня мы рассмотрим самые важные функции для работы с датой и временем.
Функция PHP date()
Наиболее используемая функция для обработки даты и времени – это функция date()
. Эта функция возвращает фактическую (системную) дату и время в указанном вами формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат. Полный синтаксис функции следующий:
date ( string $format [, int $timestamp = time() ] )
Функция возвращает строку, которая отформатирована в соответствии с указанным шаблоном (format
). Аргумент timestamp
задает метку времени; если timestamp не задан, тогда используется текущее системное время. Указывать временную метку необязательно, если вы ее не укажете, тогда она по умолчанию будет равна значению, которое возвращается функцией time()
.
Ниже представлены практические примеры получения фактической информации о дате и времени:
<?php echo "<p>Отображение текущей даты: " . date('d-m-Y') . "</p>"; echo "<p>Отображение текущего времени: " . date('H:i:s') . "</p>"; echo "<p>Отображение текущей даты и времени: " . date('d-m-Y H:i:s') . "</p>"; echo "<p>Отображение текущей даты и времени в длинном формате: " . date('d F Y, D - g:i:s A') . "</p>"; ?>
В данных примерах используются разные шаблоны формата даты и времени. Ниже представлена таблица с расшифровкой некоторых символов в строке format
.
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
День | — | — |
d | День месяца с 2-мя цифрами | от 01 до 31 |
D | День недели в текстовом формате, 3 символа | от Mon до Sun |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Месяц | — | — |
F | Полное название месяца, например, January или March | от January до December |
m | Порядковый номер месяца, 2 цифры | от 01 до 12 |
M | Сокращенное название месяца, 3 символа | от Jan до Dec |
Год | — | — |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2019 |
y | Порядковый номер года, 2 цифры | Примеры: 99, 19 |
Время | — | — |
a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
g | Часы в 12-часовом формате | от 1 до 12 |
G | Часы в 24-часовом формате | от 0 до 23 |
h | Часы в 12-часовом формате | от 01 до 12 |
H | Часы в 24-часовом формате, 2 цифры | от 00 до 23 |
i | Минуты, 2 цифры | от 00 до 59 |
s | Секунды, 2 цифры | от 00 до 59 |
Функция PHP mktime()
Иногда вам нужно получить метку времени в прошлом или будущем. Вы можете сделать это с помощью функции mktime()
. Вам нужно указать нужную дату, и она возвращается с меткой времени Unix. Синтаксис данной функции следующий:
int mktime ( [int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year]]]]]] )
Здесь используются следующие данные:
hour
– Количество часов, прошедших с начала дня, указанного параметрами month, day и year.minute
– Количество минут, прошедших от начала часа, указанного параметром hour.second
– Количество секунд, прошедших от начала минуты, указанной параметром minute.month
– Количество месяцев, прошедших с конца предыдущего года.day
– Количество дней, прошедших с конца предыдущего месяца.year
– Номер года, может быть указан двумя или четырьмя цифрами.
Вы можете использовать эту временную метку с вышеупомянутой функцией даты (date()
), чтобы отобразить ее в нужном формате. Ниже представлены некоторые практические примеры использования этой функции:
<?php echo "<p>Отображение даты, сгенерированной функцией mktime: " . date('d-m-Y', mktime(0, 0, 0, 5, 25, 2019)) . "</p>"; echo "<p>Отображение даты, сгенерированной функцией mktime с неверным указанием дня и месяца: " . date('d-m-Y', mktime(0, 0, 0, 14, 32, 2019)) . "</p>"; ?>
Если вы хотите получить дату завтрашнего дня, вы можете использовать следующий код:
<?php echo "<p>Сегодняшняя дата: " . date('d-m-Y') . "</p>"; echo "<p>Завтра будет: " . date('d-m-Y', mktime(0, 0, 0, date('m'), date('d')+1, date('Y') ) ) . "</p>"; ?>
В данном примере мы использовали функцию mktime()
и добавили 1 день к параметру дня, чтобы получить дату завтрашнего дня.
Теги: php
- 5304
- Опубликовано
- PHP, Уроки программирования
- прокомментируйте статью
- расскажите друзьям
Типы DATETIME, DATE и TIMESTAMP
Типы DATETIME, DATE и TIMESTAMP связаны друг с другом. Этот раздел описывает их характеристики, в чем они сходны и в чем отличаются.
Тип DATETIME применяется, когда необходимо иметь значения, включающие и дату и время. MySQL извлекает и отображает значения типа DATETIME в формате ТГГТ-ММ-ДД ЧЧ: ММ :СС’. Поддерживаемый диапазон значений для них — от ‘1000-01-01 00:00:00’ до ‘ 9999-12-31 23:59:59’ (Поддерживаемый означает, что более ранние значения могут работать, но это не гарантируется.)
Тип DATE применяется, когда необходимо иметь значения, включающие только дату, без времени. MySQL извлекает и отображает значения типа DATETIME в формате ‘ГГГГ-ММ-ДД’. Поддерживаемый диапазон-от Ч000-01-0Г до ‘9999-12-31’.
Тип столбца TIMESTAMP имеет ряд свойств, зависящих от версии MySQL и SQL-режима, в котором работает сервер. Эти свойства описаны далее в настоящем разделе.
Вы можете специфицировать значения типов DATETIME, DATE и TIMESTAMP, используя любой из общепринятых наборов форматов:
- Как строку в формате ‘ГГГГ-ММ-ДД ЧЧ:ММ:СС или ‘ГГ-ММ-ДД ЧЧ:ММ:СС. Допускается ослабленный синтаксис: любой символ пунктуации может быть использован в качестве разделителя между датой и временем. Например, ’98-12-31 11:30:45’, ‘98.12.31 11+30+45′, ’98/12/31 11*30*45’ и ‘98012031 11Л30Л45’ — эквивалентны.
- Как строку в формате ‘YYYY-MM-DD’ или ‘YY-MM-DD’. Ослабленный синтаксис также допускается. Например, эквивалентны следующие значения: ’98-12-31′,’98.12.31′,’98/12/31′ и ‘98012031’.
- Как строку без разделителей в формате ‘ГГГГММДДЧЧММСС’ или ‘ ГГММДДЧЧММСС’, предполагая, что строка имеет смысл в качестве даты. Например, ‘ 19970523091528’ и ‘970523091528’ интерпретируются как ‘1997-0 5-23 09:15:28’, но ‘971122129015’ неверно (потому что имеет бессмысленное значение минут) и становится ‘0000-00-00 00:00:00’.
- Как строку без разделителей в формате ‘ГГГГММДД’ или ТГММДД’, предполагая, что строка имеет смысл в качестве даты. Например, ‘19970523’ и ‘980523’ интерпретируются как ‘1997-05-23’, но ‘971332’ неверно (неправильное значение месяца и дня) и превращается в ‘ 0000—00—00’.
- Как число в формате ГГГГММДДЧЧММСС или ГГММДДЧЧММСС, предполагая, что число имеет смысл в качестве даты. Например, 19830905132800 и 830905132800 интерпретируются как ‘1983-09-05 13:28:00’.
- Как число в формате ГГГГММДД или ГГММДД, предполагая, что число имеет смысл в качестве даты. Например, 19830905 и 830905 интерпретируются как ‘1983-09-05’.
- Как результат функции, которая возвращает приемлемое в контексте DATETIME, DATE или TIMESTAMP значение, такое как NOW() или CURRENT_DATE.
Неверные величины DATETIME, DATE или TIMESTAMP преобразуются в нулевые значе-ниясоответствующеготипа(‘0000-00-00 00:00:00’, ‘0000-00-00’ или 00000000000000).
Для значений, указанных в виде строки, включающей разделитель даты, нет необходимости задавать два разряда для месяца или дня, которые меньше 10. ‘1976-6-9’ — это тоже самое, что и ‘1976-06-09’. Аналогично, для значений, заданных в виде строки, включающей разделитель времени, не нужно указывать два разряда для часов, минут и секунд, которые меньше 10. ‘1979-10-30 1:2:3’ — это то же самое, что ‘1979-10-30 01:02:03’.
Значения, заданные в виде числа, должны иметь длину 6, 8, 12 или 14 разрядов. Если число имеет длину 8 или 14 разрядов, предполагается, что оно задает значение в формате ГГГГММДД или ГГГГММДДЧЧММСС и что год задан четырьмя разрядами. Если число имеет длину 6 или 12, то предполагается, что оно задает значение в формате ГГММДД или ГГММДДЧЧММСС и год задан двумя разрядами. Числа, длина которых отличается от 6, 8, 12 и 14, дополняются ведущими нулями до ближайшего количества разрядов из указанного ряда.
Значения, заданные в виде строки без разделителей, интерпретируются с использованием их длины, как описано выше. Если длина строки 8 или 14 символов, предполагается, что год задан в 4-значном формате. В противном случае предполагается, что год задан первыми двумя знаками. Строка интерпретируется слева направо, чтобы извлечь значения года, месяца, дня, часов, минут и секунд. Это означает, что вы не должны использовать строки длиной менее 6 символов. Например, если вы укажете ‘9903’, имея в виду март 1999 года, то обнаружите, что MySQL вставит нулевую дату в таблицу. Так получается из-за того, что значения года и месяца равны 99 и 03, но часть, указывающая день, полностью отсутствует, то есть это значение не задает корректную дату. Однако, начиная с MySQL 3.23, вы можете явно указать нулевое значение месяца или дня. Например, можно указать ‘990300’, чтобы вставить в таблицу значение ‘1999-03-00’.
В определенных пределах вы можете присваивать значения одного типа объектам другого типа. Однако, при этом возможно некоторое искажение с потерей информации:
- Если вы присваиваете значение типа DATE объекту типа DATETIME или TIMESTAMP, временная часть значения принимается равной ’00:00:00′, поскольку значения типа DATE не содержат информации о времени.
- Если вы присваиваете значение типа DATETIME или tiMesTAMP объекту типа DATE,временная часть значения теряется, поскольку DATE не может ее включить в себя.
- Помните, несмотря на то, что значения DATETIME, DATE и TIMESTAMP могут быть указаны с использованием одного и того же набора форматов, диапазоны их допустимых значений отличаются. Например, значения TIMESTAMP не могут быть ранее 1970 или позднее 2037 года. Это означает, что дата вроде ‘1968-01-10’, которая вполне корректна в качестве значения типа DATETIME или DATE, неверна для типа TIMESTAMP и будет преобразована в 0 при присвоении такому объекту.
Не следует также забывать о некоторых ловушках при указании значений дат:
- Ослабленный формат значений, заданных в виде строк, может вводит в заблуждение. Например, значение вроде ’10:11:12′ может выглядеть как время, потомучто используется разделитель ‘:’, но если оно применяется в контексте даты, то будет интерпретировано как ‘2010-11-12’. В то же время значение ’10:45:15′
будет преобразовано в ‘0000-00-00′, поскольку ’45’ не является допустимым месяцем. - Сервер MySQL выполняет только базовую проверку правильности дат: диапазоны значений года, месяца и дня составляют соответственно от 1000 до 9999, от 00 до 12 и от 00 до 31. Любые даты, содержащие части, выходящие за пределы этих диапазонов, становятся субъектами преобразования в ‘0000-00-00’. Помните, что это позволяет вам сохранять неверные даты, вроде ‘2002-04-31’. Чтобы гарантировать правильность даты, выполняйте проверку внутри приложения.
- Даты, содержащие двузначный год, неоднозначны, потому что неизвестен век. MySQL интерпретирует двузначные годы следующим образом: * Год в диапазоне 00-69 преобразуется в 2000—2069.
- Год в диапазоне 70-99 преобразуется в 1970-1999.
Свойства TIMESTAMP в версиях MySQL, предшествующих 4.1
TIMESTAMP представляет собой тип столбца, который можно использовать для автоматической отметки текущей даты и времени при выполнении операций UPDATE или INSERT. Если в таблице несколько столбцов типа TIMESTAMP, только первый из них обновляется автоматически.
Автоматическое обновление первого столбца TIMESTAMP в таблице выполняется при наступлении одного из следующих условий:
- При явном присвоении ему значения NULL.
- Столбец не указан явно в операторе INSERT или LOAD DATA INFILE.
- Столбец не указан явно в операторе UPDATE, а значение какого-то другого столбца при этом изменяется. Оператор UPDATE, устанавливающий столбцу такое же значение, как он имел ранее, не приводит к обновлению столбца TIMESTAMP. Если вы присваиваете старое значение, MySQL игнорирует это в целях эффективности.
Столбцы типа TIMESTAMP также могут обновляться текущей датой и временем, если устанавливать их явно в нужное значение. Это верно даже для первого столбца TIMESTAMP. Вы можете использовать это свойство, например, если хотите установить значение столбца равным текущей дате и времени при создании строки, но не менять его при последующих обновлениях строки:
- Позвольте MySQL установить значение столбца при создании строки. Это инициализирует ее текущим значением даты и времени.
- При выполнении последующих обновлений других столбцов строки устанавливайте значение столбца TIMESTAMP равным его текущему значению:
UPDATE имя__таблицы
SET столбец_ imes tamp- столбец_ Ытеstamp, другой_столбец1 = новое_зачение1, другой_столбец2 = новое_зачение2, …
Другой способ поддерживать столбец, который записывает время создания строки, предполагает использование столбца DATETIME, инициализируемого значением NOW () при создании строки и не изменяемого в дальнейшем.
Значения TIMESTAMP могут изменяться от начала 1970 года до части 2037 года с разрешением в одну секунду. Значения отображаются в виде чисел.
Формат, в котором MySQL извлекает и отображает значения TIMESTAMP, зависит от ширины отображения, как иллюстрирует табл. 4.3. Полный формат TIMESTAMP состоит из 14 разрядов, однако столбцы TIMESTAMP можно определить и в более коротком формате отображения.
Таблица Зависимость формата отображения от ширины
Все столбцы TIMESTAMP имеют один и тот же размер хранения, независимо от формата отображения. Наиболее часто используемые форматы — в 6, 8, 12 и 14 символов. Вы можете задать произвольный размер отображения при создании таблицы, но значения 0 и больше 14 приводятся к 14. Нечетные значения от 1 до 13 приводятся к ближайшему большему четному.
Столбца TIMESTAMP хранят корректные значения, используя полную точность, с которой они были указаны, независимо от ширины отображения. Однако с этим связаны и некоторые ограничения:
- Следует всегда указывать год, месяц и день, даже если столбец объявлен как TIMESTAMP(4) или TIMESTAMP(2). Иначе значение считается некорректным и со храняется 0.
- Если вы используете ALTER table, чтобы расширить столбец TIMESTAMP, то будет высвечиваться информация, которая ранее была скрытой.
- Аналогично, при сужении столбца TIMESTAMP информация не теряется, кроме как в том смысле, что выводиться будет меньше информации, чем ранее.
- Несмотря на то что столбцы TIMESTAMP хранятся с полной точностью, единственной функцией, которая работает с полным объемом хранимой в них информации, является UNIX_TIMESTAMP(). Все остальные функции работают с форматированным извлеченным значением. Это значит, что вы не можете использовать функцию типа HOUR () или SECOND (), если только соответствующая часть не включена в форматированное значение столбца. Например, часть ЧЧ столбца TIMESTAMP не будет отображаться, если только ее отображаемая ширина не равна, по меньшей мере, 10, поэтому применение HOURO для более коротких значений TIMESTAMP приведет к бессмысленному результату.
Свойства TIMESTAMP в MySQL версии 4.1 и выше
Начиная с MySQL 4.1, свойства TIMESTAMP отличаются от тех, что были в предшествующих выпусках: а Столбцы TIMESTAMP отображаются в том же формате, что и столбцы DATETIME.
- Ширина отображения больше не поддерживается, как описано ранее. Другими словами, теперь нельзя использовать TIMESTAMP (4) или TIMESTAMP (2). В дополнение, если сервер MySQL запущен в режиме MAXDB, тип TIMESTAMP идентичен datetime. To есть, если сервер запущен в режиме MAXDB в момент создания таблицы, любые столбцы TIMESTAMP создаются как DATETIME. В результате эти столбцы используют формат отображения DATETIME, имеют тот же диапазон допустимых значений и никакого автоматического обновления не происходит.
В режиме MAXDB сервер MySQL можно запускать, начиная с версии 4.1.1. Чтобы включить этот режим, укажите при запуске сервера опцию —sql-mode=MAXDB, либо во время выполнения установите значение глобальной переменной sqljnode:
mysql SET GLOBAL sql_mode=MAXDB;
Клиент может принудить сервер работать в режиме MAXDB для его собственного сеанса с помощью команды:
mysql SET SESSION sql_mode=MAXDB;
Как указать дату в php
Содержание:
Среди разнообразных задач программирования, различные манипуляции со значениями даты и времени встречаются достаточно часто. Редкая автоматизированная система, база данных может обойтись без сохранения информации о времени того или иного процесса. Помимо простейшего добавления даты в запись базы данных или отображения этой даты, встречаются множество задач вывода этих дат в различном виде, проверки соответствия текущего времени с заданным таймером, вычисление срока между двумя датами и многое другое.
Для удобства работы с датами каждый язык программирования имеет свои специальные типы данных для хранения значения даты и времени. Чаще всего это числовое значение, либо целое, либо с плавающей точкой.
В PHP работа с датой чаще всего сталкивается с UNIX TIMESTAMP. Здесь время хранится целым числом. Исчисление времени начинается с 1 января 1970 года. Поэтому, например, дата и время 11.12.2014 19:40:00, будет представлено числом 1418316000. Эта цифра показывает, сколько секунд прошло с нулевой даты 1 января 1970 года, названой Эпохой Unix.
Пример php-страницы, предоставляющий возможности преобразования данных представлен на сайте в разделе программ программой «Преобразование формата даты и времени». Здесь можно сформировать нужную дату в формат UNIX TIMESTAMP, а так же привести этот формат в стандартный, понятный человеку вид.
Получение текущего времени и даты в PHP
Для получения текущего времени сервера используется функция
которая как раз вернет значение в формате unix timestamp.
На первый взгляд не очень удобный формат для человека, но, как известно, чем проще представление данных, тем быстрее выполняется обработка этих значений компьютером. Кроме того, хранение числа в базе данных намного экономичнее, чем какой-либо специальный формат. Так же, PHP работает со временем одинаково и на Unix и на Windows платформе, что обеспечивает возможность использовать код на любой из этих платформ.
Преобразование формата даты и времени в PHP
Простейший механизм, позволяющий преобразовать числовое значение даты на более понятные значения, предоставляется функцией:
Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:
seconds | секунды (0-59) |
minutes | минуты (0-59) |
hours | часы (0-23) |
mday | день месяца (1-31) |
wday | день недели (0-6), начиная с воскресенья |
mon | месяц (1-12) |
year | год |
yday | день года (0-365) |
weekday | название дня недели (например, Monday) |
month | название месяца (например, January) |
количество секунд, прошедших с начала Эпохи Unix |
Полученный массив, позволяет вывести значения нужном виде:
Так же для преобразования формата даты и времени можно воспользоваться функцией:
Она предназначена для получения текущей даты unix timestamp в нужном формате. Строковый параметр $template определяет формат вывода. Параметром $unix_timestamp можно задать, с каким значением времени производится работа. Он необязательный, поэтому, если его не указать, будет использоваться текущая дата и время.
Формат задается следующими значениями:
a | «до» и «после» полудня: «am» или «pm» |
A | «до» и «после» полудня заглавными буквами: «AM» или «PM» |
d | день месяца 2 цифрами (если меньше 10, на первом месте ноль) (от 01 до 31) |
D | день недели 3 буквами. Например, «Mon» (понедельник) |
j | день месяца, 1-2 цифры без начальных нулей (от 1 до 31) |
F | название месяца. Например, «January» |
h | час, 12-часовой формат (от 01 до 12) |
H | час, 24-часовой формат (от 00 до 23) |
g | час, 12-часовой формат без нулей (от 1 до 12) |
G | час, 24-часовой формат без нулей (от 0 до 23) |
i | минуты (от 00 до 59) |
I (заглавная i) | 1, если действует переход на летнее время, иначе 0 |
L | 1, если год високосный, или 0 если не високосный |
B | время в формате Интернет-времени (альтернативной системы отсчета времени суток) (от 000 до 999) |
T | временная зона компьютера. Например, MDT |
l (строчная L) | день недели. Например, «Monday» |
m | месяц, две цифры с нулями (от 01 до 12) |
n | месяц, одна-две цифры без нулей (от 1 до 12) |
M | сокращенное наименование месяца. Например, «Jan» |
t | число дней в указанном месяце (от 28 до 31) |
s | секунды (от 0 до 59) |
S | англоязычный порядковый суффикс числа из двух букв («st», «nd», «rd» или «th») |
U | целое число секунд, прошедших с момента начала эпохи UNIX |
y | год, цифровой, 2 цифры (14) |
Y | год, цифровой, 4 цифры (2014) |
z | порядковое число дня в году (от 0 до 365) |
Z | смешение временной зоны в секундах (от -43200 до 43200) |
N | порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) в соответствии со стандартом ISO-8601, (добавлен в версии PHP 5. 1.0) |
w | порядковый номер дня недели от 0 (воскресенье) до 6 (суббота) |
W | порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) |
o | номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) |
e | код шкалы временной зоны. Например: UTC, GMT, Atlantic/Azores (добавлен в версии PHP 5.1.0) |
O | разница с временем по Гринвичу, в часах. Например: +0200 |
P | разница с временем по Гринвичу с двоеточием между часами и минутами. Например: +02:00 (добавлено в версии PHP 5.1.3) |
c | дата в формате стандарта ISO 8601. Например, 2014-12-12T15:19:21+00:00 (добавлено в PHP 5) |
r | дата в формате » RFC 2822. Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) |
Как видно из списка, с помощью этой функции можно получить очень много полезных данных о дате. Например:
Другие символы, входящие в шаблон, будут выведены в строке как есть. Если же потребуется ввести символ, который используется в функции как код формата, перед ними вставляется символ «\». Для значения «\n» (символ перехода на новую строку), следует указать «\\n». Таким образом, можно делать вывод целого сообщения, содержащего сведения о дате и времени:
Преобразование даты и времени в формат timestamp
Для обратного преобразования даты из стандартного формата в числовое значение timestamp применяется функция:
Функция mktime() возвращает значение времени Unix, соответствующую дате и времени, заданным аргументами. Например:
Следует внимательно относится к порядку аргументов функции: часы, минуты, секунды, месяц, день, год.
Кроме простого формирования значения даты в timestamp, функцию mktime() можно использовать для арифметически вычисления с датами. Для этого просто можно ввести необходимые аргументы. Например, если указать 14 месяц, то в итоговом значении, месяц будет 2-й, а значение года увеличится на единицу:
Аналогично можно поступать и с другими параметрами.
Проверка корректности даты в PHP
При работе с датами, особенно при формировании даты предложенной выше функцией mktime() необходимо учитывать корректность вводимой даты. Для этого в PHP используется функция:
Возвращает true если дата, заданная аргументами, является правильной; иначе возвращает false. Дата считается правильной, если:
— год в диапазоне от 1 до 32767;
— месяц в диапазоне от 1 до 12;
— день для заданного месяца с учетом високосного года указаны правильно.
Сегодняшняя статья посвящена рассмотрению того, как на практике использовать функции по получению даты и времени в PHP, а также обзору способов вывода и форматирования даты и времени.
Основные моменты для дат и времени в PHP
Функции, которые обрабатывают дату и время в PHP, позволяют получать дату и время с того сервера, на котором выполняется скрипт. Также они позволяют манипулировать, редактировать, форматировать эти значения перед их отображением на экран (выводом). Сегодня мы рассмотрим самые важные функции для работы с датой и временем.
Функция PHP date()
Наиболее используемая функция для обработки даты и времени – это функция date() . Эта функция возвращает фактическую (системную) дату и время в указанном вами формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат. Полный синтаксис функции следующий:
Функция возвращает строку, которая отформатирована в соответствии с указанным шаблоном ( format ). Аргумент timestamp задает метку времени; если timestamp не задан, тогда используется текущее системное время. Указывать временную метку необязательно, если вы ее не укажете, тогда она по умолчанию будет равна значению, которое возвращается функцией time() .
Ниже представлены практические примеры получения фактической информации о дате и времени:
В данных примерах используются разные шаблоны формата даты и времени. Ниже представлена таблица с расшифровкой некоторых символов в строке format .
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
День | — | — |
d | День месяца с 2-мя цифрами | от 01 до 31 |
D | День недели в текстовом формате, 3 символа | от Mon до Sun |
z | Порядковый номер дня в году (начиная с 0) | От до 365 |
Месяц | — | — |
F | Полное название месяца, например, January или March | от January до December |
m | Порядковый номер месяца, 2 цифры | от 01 до 12 |
M | Сокращенное название месяца, 3 символа | от Jan до Dec |
Год | — | — |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2019 |
y | Порядковый номер года, 2 цифры | Примеры: 99, 19 |
Время | — | — |
a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
g | Часы в 12-часовом формате | от 1 до 12 |
G | Часы в 24-часовом формате | от до 23 |
h | Часы в 12-часовом формате | от 01 до 12 |
H | Часы в 24-часовом формате, 2 цифры | от 00 до 23 |
i | Минуты, 2 цифры | от 00 до 59 |
s | Секунды, 2 цифры | от 00 до 59 |
Функция PHP mktime()
Иногда вам нужно получить метку времени в прошлом или будущем. Вы можете сделать это с помощью функции mktime() . Вам нужно указать нужную дату, и она возвращается с меткой времени Unix. Синтаксис данной функции следующий:
Здесь используются следующие данные:
- hour – Количество часов, прошедших с начала дня, указанного параметрами month, day и year.
- minute – Количество минут, прошедших от начала часа, указанного параметром hour.
- second – Количество секунд, прошедших от начала минуты, указанной параметром minute.
- month – Количество месяцев, прошедших с конца предыдущего года.
- day – Количество дней, прошедших с конца предыдущего месяца.
- year – Номер года, может быть указан двумя или четырьмя цифрами.
Вы можете использовать эту временную метку с вышеупомянутой функцией даты ( date() ), чтобы отобразить ее в нужном формате. Ниже представлены некоторые практические примеры использования этой функции:
Если вы хотите получить дату завтрашнего дня, вы можете использовать следующий код:
В данном примере мы использовали функцию mktime() и добавили 1 день к параметру дня, чтобы получить дату завтрашнего дня.
Какая функция PHP может возвращать текущую дату/время?
29 ответов
Время будет время вашего сервера. Легким обходным путем для этого является установка часового пояса вручную с помощью date_default_timezone_set перед date() или time() вызываются.
Я в Мельбурне, Australia, поэтому у меня есть что-то вроде этого:
Или другой пример: LA — US:
Вы также можете узнать, в какой временной зоне находится сервер:
Так что-то вроде:
Итак, короткий ответ на ваш вопрос будет следующим:
Тогда все время будет в указанном вами часовом поясе:)
С PHP 5.2.0 вы можете сделать это, используя ООП и DateTime() (конечно, если вы предпочитаете ООП):
И чтобы указать timezone :
Это может быть более надежным, чем просто добавление или вычитание количества секунд в день или месяц в метку времени из-за летнего времени.
Вы можете использовать переменную $_SERVER[‘REQUEST_TIME’] (доступную с PHP 5.1.0) или time() function, чтобы получить текущую временную метку Unix.
PHP time() возвращает текущую временную метку unix. При этом вы можете использовать функцию date(), чтобы отформатировать ее в соответствии с вашими потребностями.
Как отметил Паоло в комментариях, второй аргумент лишний. Следующий фрагмент эквивалентен приведенному выше:
PHP date функция может выполнить это задание
Описание:
Возвращает строку, форматированную в соответствии с заданной строкой формата, используя заданную метку времени или текущее время, если не указана метка времени.
Примеры:
Вы можете использовать переменную $_ SERVER [‘REQUEST_TIME’] или функцию ** time() **. Оба они возвращают временную метку Unix.
В большинстве случаев эти два решения дают точную отметку времени Unix. Разница между ними заключается в том, что $_SERVER [‘REQUEST_TIME’] возвращает метку времени последнего запроса сервера, а time() возвращает текущее время. Это может привести к незначительным различиям в точности в зависимости от вашего приложения, но в большинстве случаев оба этих решения должны быть достаточными.
В соответствии с приведенным выше примером кода вы захотите отформатировать эту информацию после получения отметки времени Unix. Неформатированная временная метка Unix выглядит так:
Unix Отметка времени: 1232659628
Итак, чтобы получить что-то, что будет работать, вы можете использовать функцию date() для ее форматирования.
Хорошая ссылка на способы использования функции date() находится в страницах PHP Manual, здесь.
В качестве примера следующий код возвращает дату, которая выглядит так:
Вы часто будете работать с датами и временем при разработке веб-сайтов. Например, вам может потребоваться показать последнюю измененную дату в сообщении или указать, как давно читатель написал комментарий. Возможно, вам также придется показывать обратный отсчет дней до специального события.
К счастью, PHP поставляется с некоторыми встроенными функциями даты и времени, которые помогут нам сделать все это и многое другое довольно легко.
В этом учебном пособии вы узнаете, как отформатировать текущую дату и время в PHP. Вы также узнаете, как получить временную метку из строки даты и как добавить и вычесть разные даты.
Получение даты и времени в строчном формате
date($ format, $timestamp) — одна из наиболее часто используемых функций даты и времени, доступных в PHP. Он принимает желаемый формат вывода для даты в качестве первого параметра и целое число как значение временной метки, которое необходимо преобразовать в заданный формат даты. Второй параметр является необязательным, и его отсутствие дает вывод текущей даты и времени в строчном формате на основе значения $format .
Параметр $format принимает ряд символов в качестве допустимых значений. Некоторые из этих символов имеют прямые значения: Y дает вам полное числовое значение года с 4 цифрами (2018), а y дает только две последние цифры текущего года (18). Аналогично, H даст вам час в 24-часовом формате с ведущими нулями, а h даст вам час в 12-часовом формате с ведущими нулями.
Вот некоторые из наиболее распространенных символов формата даты и их значений.
Символ | Значение | Пример |
---|---|---|
d | день месяца с ведущими нулями | 03 или 17 |
j | день месяца без ведущих нулей | 3 или 17 |
D | день недели в виде трехбуквенной аббревиатуры | Mon |
l | полный день недели | Monday |
m | месяц как число с ведущими нулями | 09 или 12 |
n | месяц как число без ведущих нулей | 9 или 12 |
M | месяц как трехбуквенная аббревиатура | Sep |
F | полное название месяца | September |
y | двухзначный год | 18 |
Y | полное число года | 2018 |
Существует множество других специальных символов для указания вывода для функции date() . Лучше всего проконсультироваться с таблицей символов формата в документации по функции date() для получения дополнительной информации о специальных случаях.
Давайте рассмотрим некоторые практические примеры функции date() . Мы можем использовать ее для получения текущего года, текущего месяца, текущего часа и т. д., Или мы можем использовать ее для получения полной строки даты.
Вы также можете использовать функцию date() для вывода времени. Вот некоторые из наиболее часто используемых символов формата времени:
Символ | Значение | Пример |
---|---|---|
g | часы в 12-часовом формате без начальных нулей | 1 или 12 |
h | часы в 12-часовом формате с ведущими нулями | 01 или 12 |
G | часы в 24-часовом формате без начальных нулей | 1 или 13 |
H | часы в 24-часовом формате с ведущими нулями | 01 или 13 |
a | am/pm в нижнем регистре | am |
A | am/pm в верхнем регистре | AM |
i | минуты с ведущими нулями | 09 или 15 |
s | секунды с начальными нулями | 05 или 30 |
И вот несколько примеров вывода форматированных строк времени.
Также важно избегать этих специальных символов, если вы хотите использовать их внутри своей строки даты.
Получение временной метки Unix
Иногда вам нужно получить значение текущей метки времени Unix в PHP. Это очень легко с помощью функции time() . Она возвращает целочисленное значение, которое описывает количество миллисекунд, прошедших с 1 января 1970 года в полночь (00:00:00) по Гринвичу.
Вы также можете использовать эту функцию для возврата туда и обратно во времени. Для этого все, что вам нужно сделать, — вычесть правильное количество секунд из текущего значения time() , а затем перевести полученное значение в нужную строку даты. Вот два примера:
Одна важная вещь, которую вы должны помнить, это то, что значение временной метки, возвращаемое time() , является агностическим часовым поясом и получает количество секунд с 1 января 1970 года в 00:00:00 по UTC. Это означает, что в определенный момент времени эта функция вернет то же значение в США, Европе, Индии или Японии.
Другой способ получить временную метку для конкретной даты — использовать функцию mktime($hour, $minute, $second, $month, $day, $year) . Когда все параметры опущены, эта функция просто использует текущую локальную дату и время для вычисления значения временной метки. Эта функция также может использоваться с date() для генерации полезных строк даты и времени.
В принципе, time() может использоваться для перехода туда и обратно в течение некоторого периода времени, в то время как mktime() полезен, когда вы хотите перейти к определенному моменту времени.
Преобразование строки Datetime в метку времени
Функция strtotime($time, [$now = time()]) будет невероятно полезна, когда вы хотите преобразовать разные значения даты и времени из строкового формата в метку времени. Функция может анализировать почти все типы строк даты и времени в метках времени.
С относительными форматами даты и времени эта функция может легко преобразовывать часто используемые строки в допустимые значения метки времени. Следующие примеры должны помочь понять:
Добавление, вычитание и сравнение дат
Можно добавлять и вычитать определенные периоды времени к и от даты. Это можно сделать с помощью функций date_add() и date_sub() . Вы также можете использовать функцию date_diff() , чтобы вычесть две даты и вывести разницу между ними по годам, месяцам и дням или что-то еще.
Как правило, проще провести такую арифметику, связанную с датой и временем, в объектно-ориентированном стиле с классом DateTime , а не делать это процедурно. Мы попробуем оба эти стили, и вы сможете выбрать то, что вам больше нравится.
При использовании DateTime::diff() объект DateTime , на который вызывается метод diff() , вычитается из объекта DateTime , который передается методу diff() . Когда вы пишете код процедурного стиля, первый параметр даты вычитается из второго параметра даты.
И функция, и метод возвращают объект DateInterval() , представляющий разницу между двумя датами. Этот интервал можно отформатировать, чтобы дать конкретный результат, используя все символы, перечисленные в документации метода format() .
Различие между объектно-ориентированным стилем и процедурным становится более очевидным при вычитании или добавлении временного интервала.
Вы можете создать экземпляр нового объекта DateTime с помощью конструктора DateTime() . Аналогично, вы можете создать экземпляр объекта DateInterval с помощью конструктора DateInterval() . Он принимает строку в качестве ее параметра. Интервальная строка начинается с P , что означает период. После этого вы можете указать каждый период с использованием целочисленного значения и символа, присвоенного определенному периоду. Для получения дополнительной информации вы должны проверить документацию DateInterval .
Вот пример, который иллюстрирует, как легко добавлять или вычитать даты и время в PHP.
Вы также можете сравнить даты на PHP с помощью операторов сравнения. Это может пригодиться время от времени. Давайте создадим счетчик рождественских дней, используя операторы сравнения и другие методы DateTime .
Мы начали с создания двух объектов DateTime для хранения текущего времени и даты Рождества этого года. После этого мы запускаем цикл while , чтобы добавить 1 год к рождественской дате 2018 года, пока настоящая дата не станет меньше, чем дата Рождества. Это будет полезно, когда код будет запущен 18 января 2024 года. Цикл while увеличит дату Рождества, если он меньше текущей даты во время запуска этого скрипта.
Наш рождественский счетчик теперь будет работать в течение многих десятилетий без проблем.
Последние мысли
В этом уроке мы научились выводить текущую дату и время в нужном формате с помощью функции date() . Мы также увидели, что date() также может использоваться для получения только текущего года, месяца и т. д. После этого мы узнали, как получить текущую временную метку или преобразовать действительную строку DateTime в метку времени. Наконец, мы узнали, как добавлять или вычитать период времени с разных дат.
Я попытался описать ключевые функции и методы DateTime . Вы обязательно должны взглянуть на документацию, чтобы прочитать о функциях, не описанных в учебнике. Если у вас есть какие-либо вопросы, не стесняйтесь, дайте мне знать в комментариях.
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 8601 |
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 |
дата() | Форматирует локальную дату и время |
getdate() | Возвращает информацию о дате/времени временной метки или текущую локальную дату/время |
gettimeofday() | Возвращает текущее время |
gmdate() | Форматирует дату и время GMT/UTC |
gmmktime() | Получить отметку времени Unix для даты по Гринвичу |
gmstrftime() | Форматирует дату и время GMT/UTC в соответствии с региональными настройками |
идата() | Форматирует локальное время/дату как целое число |
местное время() | Возвращает местное время |
микротайм() | Возвращает текущую метку времени Unix с микросекундами |
мктайм() | Возвращает отметку времени Unix для даты |
стрфтайм() | Форматирует местное время/дату в соответствии с региональными настройками |
время выполнения() | Разбирает время/дату, сгенерированные функцией strftime() |
стртотайм() | Преобразует текстовую дату и время на английском языке в отметку времени Unix |
время() | Возвращает текущее время в виде метки времени 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() | Возвращает текущую версию timezonedb |
День | — | — |
д | День месяца, 2 цифры с ведущими нулями | 01 до 31 |
Д | Текстовое представление дня, три буквы | Пн с по Вс |
к | День месяца без ведущих нулей | 1 до 31 |
л (строчная буква «L») | Полное текстовое представление дня недели | Воскресенье с по Суббота |
Н | ISO-8601 числовое представление дня недели (добавлено в PHP 5. 1.0) | 1 (в понедельник) по 7 (в воскресенье) |
С | Английский порядковый суффикс дня месяца, 2 символа | ст , ст , ст или -й . Хорошо работает с j |
ш | Числовое представление дня недели | 0 (в воскресенье) по 6 (в субботу) |
я | День года (начиная с 0) | 0 от до 365 |
Неделя | — | — |
Ш | ISO-8601 номер недели года, недели, начинающиеся в понедельник | Пример: 42 (42-я неделя года) |
Месяц | — | — |
Ф | Полное текстовое представление месяца, например, январь или март | .Январь — Декабрь |
м | Числовое представление месяца с ведущими нулями | 01 от до 12 |
М | Краткое текстовое представление месяца, три буквы | Январь — Декабрь |
нет | Числовое представление месяца без ведущих нулей | 1 от до 12 |
т | Количество дней в данном месяце | 28 от до 31 |
Год | — | — |
Л | Високосный ли год | 1 , если год високосный, 0 в противном случае. |
или | Год нумерации недель ISO-8601. Это имеет то же значение, что и Y , за исключением случаев, когда номер недели ISO ( W ) относится к предыдущему или следующему году, тому году вместо этого используется. (добавлено в PHP 5.1.0) | Примеры: 1999 или 2003 |
Д | Полное числовое представление года, 4 цифры | Примеры: 1999 или 2003 |
у | Двузначное представление года | Примеров: 99 или 03 |
Время | — | — |
и | Нижний регистр До полудня и После полудня | утра или вечера |
А | Заглавные буквы До полудня и После полудня | ДП или ДН |
Б | Swatch Интернет-время | 000 от до 999 |
г | 12-часовой формат часа без ведущих нулей | 1 от до 12 |
Г | 24-часовой формат часа без ведущих нулей | 0 от до 23 |
ч | 12-часовой формат часа с ведущими нулями | 01 от до 12 |
Н | 24-часовой формат часа с ведущими нулями | 00 от до 23 |
и | Минуты с ведущими нулями | 00 до 59 |
с | Секунды с ведущими нулями | 00 от до 59 |
и | Микросекунды (добавлено в PHP 5. 2.2). Обратите внимание, что date() всегда будет генерировать 000000 , так как принимает целое число параметр, тогда как DateTime::format() делает поддерживать микросекунды, если DateTime был созданный с микросекундами. | Пример: 654321 |
v | Миллисекунды (добавлено в PHP 7.0.0). Применяется то же примечание, что и для и . | Пример: 654 |
Часовой пояс | — | — |
и | Идентификатор часового пояса (добавлен в PHP 5.1.0) | Примеры: UTC , GMT , Атлантика/Азорские острова |
I (заглавная i) | Независимо от того, соответствует ли дата летнему времени | 1 при переходе на летнее время, 0 в противном случае. |
О | Разница с временем по Гринвичу (GMT) в часах | Пример: +0200 |
Р | Разница со временем по Гринвичу (GMT) с двоеточием между часами и минутами (добавлено в PHP 5. 1.3) | Пример: +02:00 |
Т | Аббревиатура часового пояса | Примеры: EST , MDT … |
З | Смещение часового пояса в секундах. Смещение часовых поясов к западу от UTC всегда отрицательный, а для тех, кто к востоку от UTC, всегда положительный. | -43200 — 50400 |
Полная дата/время | — | — |
с | Дата ISO 8601 (добавлено в PHP 5) | 2004-02-12T15:19:21+00:00 |
р | » RFC 2822, форматированная дата | Пример: Чт, 21 декабря 2000 г. 16:01:07 +0200 |
У | секунды с эпохи Unix (1 января 1970 00:00:00 по Гринвичу) | См. также время() |
Временные метки, часовые пояса, диапазоны времени и форматы даты
- Последнее обновление
- Сохранить как PDF
Мы поддерживаем несколько вариантов меток времени, часовых поясов, временных диапазонов и дат. При сборе данных журнала отметка времени, прикрепленная к сообщениям, имеет жизненно важное значение как для целостности данных в вашей учетной записи, так и для точных результатов запроса. Из-за важности меток времени Sumo Logic индексирует метку времени каждого сообщения, гарантируя, что данные, относящиеся к временному диапазону запроса, правильно возвращаются в результатах поиска, что позволяет восстановить правильную временную шкалу события.
Временные метки
Временные метки — это часть сообщения журнала, в котором отмечается время возникновения события. Во время загрузки мы можем определить временную метку сообщения, преобразовать ее во время эпохи Unix (количество миллисекунд с полуночи, 1 января 1970 года по всемирному координированному времени) и проиндексировать ее. Временная метка анализируется либо с использованием параметров анализа временной метки по умолчанию, либо в пользовательском формате, который вы указываете, включая часовой пояс.
При настройке Источника вы можете выбрать использование настроек анализа временных меток по умолчанию или указать собственный формат для анализа временных меток в ваших сообщениях журнала. Включить синтаксический анализ меток времени Параметр выбран по умолчанию. Если он не выбран, информация о метках времени вообще не анализируется. Вместо этого мы отмечаем в журналах время обработки сообщений.
Рекомендации по отметкам времени
По умолчанию мы можем автоматически определять отметки времени в ваших сообщениях журнала. Автоматическое обнаружение идентифицирует временные метки в распространенных форматах и предпочитает временные метки, которые появляются в начале сообщения.
Если ваши сообщения журнала из источника содержат несколько меток времени, метки времени в необычных форматах или смесь разных форматов меток времени, у вас есть два варианта:
- Настройка источника для каждого формата журнала
- Настройка пользовательского формата метки времени для источника
Коллектор предполагает, что все сообщения журнала, поступающие из определенного источника, будут иметь временные метки, близкие друг к другу. Если приходит сообщение, которое кажется более чем на один день раньше или позже, чем недавние сообщения из этого источника, оно будет автоматически исправлено, чтобы соответствовать текущему времени. Вы можете остановить это автоматическое исправление, явным образом настроив пользовательский формат временной метки в источнике.
Сборщик также предполагает, что все сообщения журнала, поступающие из определенного Источника, будут иметь метки времени, находящиеся в пределах окна от -1 года до +2 дней по сравнению с текущим временем. Любое сообщение журнала с проанализированной отметкой времени за пределами этого окна автоматически обновляется с текущим временем. Вы должны связаться со службой поддержки Sumo Logic, чтобы настроить это поведение автокоррекции. Дополнительные сведения см. в статье о том, как получать старые или исторические данные.
Автоматический анализ временных меток
Коллекторы могут автоматически анализировать любой из следующих форматов временных меток. Если в сообщении журнала обнаружено несколько действительных отметок времени, Collector выберет отметку времени, которая отображается в сообщении как «крайняя слева».
: Библиотека Java SimpleDateFormat используется для анализа меток времени. Дополнительную информацию см. на https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html.Формат метки времени | Пример |
гггг-ММ-дд’T’ЧЧ:мм:сс*SSSZZZZ | 2018-08-20’T’13:20:10*633+0000 |
гггг МММ дд ЧЧ:мм:сс.ССС zzz | 03 марта 2017 г. 05:12:41.211 PDT |
МММ дд ЧЧ:мм:сс ZZZZ гггг | 21 января 18:20:11 +0000 2017 |
дд/МММ/гггг:ЧЧ:мм:сс ZZZZ | 19.04.2017:06:36:15 -0700 |
МММ дд, гггг чч:мм:сс а | 2 декабря 2017 г. 2:39:58 |
МММ дд гггг ЧЧ:мм:сс | 09 июня 2018 15:28:14 |
МММ дд ЧЧ:мм:сс гггг | 20 апр 00:00:35 2010 |
МММ дд ЧЧ:мм:сс ZZZZ | 28 сен 19:00:00 +0000 |
МММ дд ЧЧ:мм:сс | 16 марта 08:12:04 |
гггг-ММ-дд’Т’ЧЧ:мм:ссZZZZ | 2017-10-14T22:11:20+0000 |
гггг-ММ-дд’T’ЧЧ:мм:сс.SSS’Z’ | 2017-07-01T14:59:55.711’+0000′ 2017-07-01T14:59:55.711Z |
гггг-ММ-дд ЧЧ:мм:сс ZZZZ | 19.08.2017 12:17:55 -0400 |
гггг-ММ-дд ЧЧ:мм:ссZZZZ | 2017-08-19 12:17:55-0400 |
гггг-ММ-дд ЧЧ:мм:сс,ССС | 2017-06-26 02:31:29,573 |
гггг/мм/дд*чч:мм:сс | 12. 04.2017*19:37:50 |
гггг МММ дд ЧЧ:мм:сс.ССС*zzz | 2018 13 апреля 22:08:13.211*PDT |
гггг МММ дд ЧЧ:мм:сс.ССС | 2017 10 марта 01:44:20.392 |
гггг-ММ-дд ЧЧ:мм:сс,СССЗЗЗЗ | 2017-03-10 14:30:12,655+0000 |
гггг-ММ-дд ЧЧ:мм:сс.ССС | 27.02.2018 15:35:20.311 |
гггг-ММ-дд ЧЧ:мм:сс.SSSZZZZ | 12.03.2017 13:11:34.222-0700 |
гггг-ММ-дд’Т’ЧЧ:мм:сс.ССС | 2017-07-22’T’16:28:55.444 |
гггг-ММ-дд’Т’ЧЧ:мм:сс | 2017-09-08’T’03:13:10 |
гггг-ММ-дд’T’ЧЧ:мм:сс’Z’ | 2017-03-12’T’17:56:22′-0700′ |
гггг-ММ-дд’Т’ЧЧ:мм:сс.ССС | 2017-11-22’Т’10:10:15.455 |
гггг-ММ-дд’Т’ЧЧ:мм:сс | 11. 02.2017’T’18:31:44 |
гггг-ММ-дд*ЧЧ:мм:сс:ССС | 2017-10-30*02:47:33:899 |
гггг-ММ-дд*ЧЧ:мм:сс | 04.07.2017*13:23:55 |
гг-мм-дд ЧЧ:мм:сс,ССС ZZZZ | 11-02-11 16:47:35,985 +0000 |
гг-мм-дд ЧЧ:мм:сс,ССС | 10-06-26 02:31:29,573 |
гг-мм-дд ЧЧ:мм:сс | 10-04-19 12:00:17 |
гг/мм/дд ЧЧ:мм:сс | 01.06.22 04:11:05 |
ггММдд ЧЧ:мм:сс | 150423 11:42:35 |
ггггММдд ЧЧ:мм:сс.ССС | 20150423 11:42:35.173 |
ММ/дд/гг*ЧЧ:мм:сс | 10.08.11*13:33:56 |
ММ/дд/гггг*ЧЧ:мм:сс | 22.11.2017*05:13:11 |
ММ/дд/гггг*ЧЧ:мм:сс*ССС | 09. 05.2017*08:22:14*612 |
ММ/дд/гг ЧЧ:мм:сс ZZZZ | 23.04.17 04:34:22 +0000 |
ММ/дд/гггг ЧЧ:мм:сс ZZZZ | 03.10.2017 07:29:46 -0700 |
ЧЧ:мм:сс | 11:42:35 |
ЧЧ:мм:сс.ССС | 11:42:35.173 |
ЧЧ:мм:сс,ССС | 11:42:35,173 |
дд/ммм ЧЧ:мм:сс,ССС | 23/апр 11:42:35,173 |
дд/МММ/гггг:ЧЧ:мм:сс | 23.04.2017:11:42:35 |
дд/МММ/гггг ЧЧ:мм:сс | 23.04.2017 11:42:35 |
дд-МММ-гггг ЧЧ:мм:сс | 23 апреля 2017 11:42:35 |
дд-МММ-гггг ЧЧ:мм:сс.ССС | 23 апреля 2017 11:42:35.883 |
дд МММ гггг ЧЧ:мм:сс | 23 апр 2017 11:42:35 |
дд МММ гггг ЧЧ:мм:сс*ССС | 23 апр 2017 10:32:35*311 |
ММдд_ЧЧ:мм:сс | 0423_11:42:35 |
ММдд_ЧЧ:мм:сс. ССС | 0423_11:42:35.883 |
ММ/дд/гггг чч:мм:сс а:ССС | 05.08.2011 3:31:18:234 |
ММ/дд/гггг чч:мм:сс а | 28.09.2011 14:23:15 |
Метки времени эпохи Unix
Метки времени эпохи Unix поддерживаются в следующих форматах:
- 10-значный формат времени эпохи, заключенный в квадратные скобки (или запятая). Цифры должны быть в самом начале сообщения. Например, [1234567890] или [1234567890, другое], за которым следует остальная часть сообщения.
- 13-значное время эпохи. 13 цифр должны быть в самом начале сообщения. Например, 12345678
… и остальная часть сообщения. - 16-значное время эпохи. 16 цифр должны быть в самом начале сообщения. Например, 12345678
… и остальная часть сообщения. - 19-значное время эпохи. 19 цифр должны быть в самом начале сообщения. Например, 1496756806,655123456…. затем следует остальная часть сообщения.
- Мы также распознаем формат времени для службы доставки журналов Akamai. Формат — 13 цифр с точкой перед последними тремя (мс): 1234567890,123
.- Значения, разделенные запятыми, где 5-е значение от начала сообщения представляет собой 10-значное время эпохи. Например, поле1, поле2, поле3, поле4, 1234567890
.- Свойство в формате JSON под названием «отметка времени», за которым следует 13-значное время эпохи. Например, «отметка времени»: «123456789013».
- Формат сообщения журнала Cisco Fortigate/Meraki:
<134>1 1439277406.8018 Store_020026 потоки src=
dst=72.245.34.184 протокол=udp sport=62118 dport=53 шаблон: 1 все - аудит сообщения: 12Linux
type=PATH msg=audit(14399.365:83931889): item=0 name="/usr/sbin/ss" inode=416 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00
Указание пользовательского формата метки времени
: Collector может автоматически анализировать большинство меток времени без каких-либо проблем, но если вы видите проблемы с анализом меток времени, вы можете вручную указать формат меток времени. Шаги одинаковы, если вы настраиваете новый источник или редактируете информацию о метке времени для существующего источника.
При указании пользовательского формата вы предоставляете нам формат временной метки и, при необходимости, регулярное выражение, помогающее найти нужную временную метку в формате строки журнала. Если вы не предоставите локатор, мы просканируем все сообщение журнала на наличие метки времени, соответствующей заданному формату по умолчанию. Вы также можете протестировать некоторые образцы строк журнала и посмотреть, сможем ли мы проанализировать новый формат.
Ваш пользовательский формат временной метки должен соответствовать нашим поддерживаемым соглашениям о временной метке.При предоставлении нескольких пользовательских форматов сначала укажите наиболее распространенный формат. Сборщик будет обрабатывать каждый пользовательский формат в указанном порядке. Как только временная метка обнаружена, дальнейшая проверка временной метки не выполняется.
Если временные метки, соответствующие вашим пользовательским форматам, не найдены, Collector все равно попытается автоматически определить временную метку журнала.
Пользовательский интерфейс
Существует два пользовательских интерфейса (UI) для указания формата временной метки: классический и новый. Новый интерфейс доступен только на определенных источниках и выпускается постепенно. Используйте кнопки ниже, чтобы просмотреть инструкции для пользовательского интерфейса, который вы видите при создании или редактировании источника.
Классический пользовательский интерфейс
- Выполните одно из следующих действий.
- Если вы настраиваете новый источник, перейдите к шагу 2.
- Чтобы изменить настройки метки времени для существующего источника, перейдите к «Управление данными» > «Коллекция» > «Коллекция ». Затем нажмите Изменить справа от имени источника и перейдите к шагу 2.
- Нажмите Дополнительно (если дополнительные настройки еще не отображаются).
- Для Формат метки времени выберите Укажите формат .
- В поле Format введите формат временной метки, который Collector должен использовать для анализа временных меток в вашем журнале. Если формат метки времени соответствует эпохе, введите «эпоха» в поле Формат . Ваш собственный формат временной метки должен соответствовать нашим поддерживаемым соглашениям о временной метке.
- Локатор метки времени – это регулярное выражение с группой захвата, соответствующей метке времени в ваших сообщениях журнала.
Локатор метки времени должен:- для 16-значных временных меток эпохи или 19-значных временных меток эпохи. В противном случае это поле не является обязательным.
- — допустимое регулярное выражение Java. В противном случае будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора меток времени your-regex недопустимо. Регулярное выражение локатора временных меток your-regex использует функции сопоставления, которые не поддерживаются.
- — регулярное выражение, совместимое с RE2, например:
\[time=(.*?)\]
. В противном случае будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора временных меток your-regex использует функции сопоставления, которые не поддерживаются.
- содержат одну безымянную группу захвата. Когда мы извлекаем временные метки, мы сканируем только ту часть каждого сообщения журнала, которая захвачена этой группой. Если сообщение журнала не соответствует выражению локатора, то к этому сообщению нельзя применить формат отметки времени. Если регулярное выражение не содержит ни одной безымянной группы захвата, будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора меток времени your-regex не содержит ни одной безымянной группы захвата. Регулярное выражение локатора меток времени your-regex использует функции сопоставления, которые не поддерживаются
. - Если вы хотите добавить несколько настраиваемых форматов меток времени, нажмите Добавить . Порядок форматов имеет большое значение. Каждый предоставленный формат метки времени проверяется в указанном порядке до тех пор, пока не будет найден соответствующий формат. Первый совпадающий формат определяет отметку времени окончательного сообщения. Если ни один из предоставленных форматов не соответствует конкретному сообщению, коллектор попытается автоматически определить временную метку сообщения.
- Нажмите Проверить после того, как вы введете все пользовательские форматы меток времени. Если вы ввели действительное регулярное выражение в локатор меток времени, вы увидите Проверка временной метки Анализ страницы . Введите примеры сообщений журнала, чтобы протестировать форматы меток времени, которые вы хотите извлечь.
- Нажмите Проверить . Результаты отображаются с проанализированной отметкой времени и совпадением формата (если есть).
Вы должны увидеть одно из следующих сообщений:- Формат совпал. В этом примере формат гггг/ММ/дд ЧЧ:мм:сс был сопоставлен и выделен зеленым цветом. Это был первый предоставленный формат, поэтому он возвращает значение 9.0743 1(формат: гггг/мм/дд ЧЧ:мм:сс локатор: \[время=(. *?)\]) Эффективное время сообщения будет 2017-01-15 02:12.000 +0000 .
- Ни один из настраиваемых форматов меток времени не совпал. Хотя пользовательские форматы не были найдены в журнале, по-прежнему есть автоматически обнаруженная временная метка, выделенная оранжевым цветом, 2017-06-01 02:12:12.259667, которую мы можем использовать. Эффективное время сообщения будет 2017-06-01 02:12:12.259 +0000
- Невозможно проанализировать ни одну временную метку . Никакая часть образца строки журнала «Эта строка не должна анализироваться» не имеет отметку времени для анализа, поэтому отметка времени будет текущим временем.
- Дополнительно. Если вы хотите внести изменения в свою строку журнала, нажмите Изменить , и вы можете указать другие строки журнала для проверки .
- Нажмите Готово для выхода Анализ временных меток теста .
- Нажмите Сохранить , чтобы сохранить пользовательские форматы меток времени.
Новый пользовательский интерфейс
- Выполните одно из следующих действий.
- Если вы настраиваете новый источник, перейдите к шагу 2.
- Чтобы изменить настройки метки времени для существующего источника, перейдите к «Управление данными» > «Коллекция» > «Коллекция ». Затем нажмите Изменить справа от имени источника и перейдите к шагу 2.
- Перейдите к разделу Дополнительные параметры для журналов .
- Для Формат метки времени выберите Укажите формат .
- В поле Format введите формат временной метки, который Collector должен использовать для анализа временных меток в вашем журнале. Если формат метки времени соответствует эпохе, введите «эпоха» в поле Формат . Ваш собственный формат временной метки должен соответствовать нашим поддерживаемым соглашениям о временной метке.
- Локатор метки времени – это регулярное выражение с группой захвата, соответствующей метке времени в ваших сообщениях журнала.
Локатор метки времени должен:- для 16-значных временных меток эпохи или 19-значных временных меток эпохи. В противном случае это поле не является обязательным.
- — допустимое регулярное выражение Java. В противном случае будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора меток времени your-regex недопустимо. Регулярное выражение локатора временных меток your-regex использует функции сопоставления, которые не поддерживаются.
- — регулярное выражение, совместимое с RE2, например:
\[time=(.*?)\]
. В противном случае будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора временных меток your-regex использует функции сопоставления, которые не поддерживаются.
- содержат одну безымянную группу захвата. Когда мы извлекаем временные метки, мы сканируем только ту часть каждого сообщения журнала, которая захвачена этой группой. Если сообщение журнала не соответствует выражению локатора, то к этому сообщению нельзя применить формат отметки времени. Если регулярное выражение не содержит ни одной безымянной группы захвата, будет отображаться следующее сообщение об ошибке:
Невозможно проверить форматы меток времени. Регулярное выражение локатора меток времени your-regex не содержит ни одной безымянной группы захвата. Регулярное выражение локатора меток времени your-regex использует функции сопоставления, которые не поддерживаются
. - Если вы хотите добавить несколько настраиваемых форматов меток времени, нажмите + Добавить . Порядок форматов имеет большое значение. Каждый предоставленный формат метки времени проверяется в указанном порядке до тех пор, пока не будет найден соответствующий формат. Первый совпадающий формат определяет отметку времени окончательного сообщения. Если ни один из предоставленных форматов не соответствует конкретному сообщению, коллектор попытается автоматически определить временную метку сообщения.
- Далее рекомендуется проверить несколько строк журнала из ваших данных на соответствие указанным вами форматам и локаторам. Введите примеры сообщений журнала, чтобы протестировать форматы меток времени, которые вы хотите извлечь.
- Нажмите Проверить после ввода строк журнала. Результаты отображаются с проанализированной отметкой времени и совпадением формата (если есть).
Вы должны увидеть одно из следующих сообщений:- Формат совпал. В этом примере формат гггг/ММ/дд ЧЧ:мм:сс был сопоставлен и выделен зеленым цветом. Это был первый предоставленный формат, поэтому он возвращается как 1 (формат: гггг/ММ/дд ЧЧ:мм:сс локатор: \[время=(.*?)\]) Эффективное время сообщения будет 2017-01-15 02:12.000 +0000.
- Ни один из настраиваемых форматов меток времени не совпал. Хотя пользовательские форматы не были найдены в журнале, по-прежнему есть автоматически обнаруженная временная метка, выделенная оранжевым цветом, 2017-06-01 02:12:12.259667, которую мы можем использовать. Эффективное время сообщения будет 2017-06-01 02:12:12.259 +0000
- Невозможно проанализировать ни одну временную метку . Никакая часть образца строки журнала «Эта строка не должна анализироваться» не имеет отметку времени для анализа, поэтому отметка времени будет текущим временем.
- Внесите необходимые изменения, чтобы убедиться, что ваши временные метки обрабатываются правильно.
- Нажмите Сохранить , чтобы сохранить пользовательские форматы меток времени.
Использование _format для устранения неполадок
Вы можете использовать _format, чтобы увидеть, как метка времени анализируется из файла журнала. Назначьте _format псевдоним, чтобы он отображался в результатах поиска, например:
| _format as timestampFormat
Поля, возвращенные в результатах поиска _format:
t:<тип синтаксического анализа>,o:<смещение>,l:<длина>,p:<формат_даты>
где <тип синтаксического анализа> может принимать следующие значения:
- fail — не удалось найти метку времени. Кэш
- — успех, кэшированный формат.
- def — успех, формат по умолчанию (указанный пользователем).
- full — успех из «полного» синтаксического анализа библиотеки шаблонов.
- нет — локальное время/время получения, поскольку для этого источника не включен анализ временных меток.
- ac1 — автоматическое исправление с помощью «оконной» эвристики (сегодня мы называем это «автокоррекцией»). Sumo Logic предполагает, что все сообщения журнала, поступающие из определенного источника, будут иметь временные метки, близкие друг к другу. Если приходит сообщение, которое кажется более чем на один день раньше или позже, чем недавние сообщения из этого источника, оно будет автоматически исправлено, чтобы соответствовать текущему времени. Вы можете остановить это автоматическое исправление, явным образом настроив пользовательский формат временной метки в источнике.
- Например, предположим, что Collector анализирует метку времени « декабря 2 , 2021 2:39:58 AM». Если ранее полученное сообщение от этого Источника имеет отметку времени до « декабря 1 , 2021 2:39:58″ или после « декабря 3 , 2021 2:39:58″, коллектор выполнит автоматическое исправление. метка времени к текущему времени.
- ac2 — автоматически корректируется эвристикой -1y, +2d. Sumo Logic предполагает, что все сообщения журнала, поступающие из определенного источника, будут иметь метки времени, находящиеся в пределах окна от -1 года до +2 дней по сравнению с текущим временем. Любое сообщение журнала с проанализированной отметкой времени за пределами этого окна автоматически обновляется с текущим временем.
- Например, предположим, что коллектор анализирует отметку времени «2 декабря 2021 2:39:58″. Если ранее полученное сообщение от этого Источника было получено раньше «1 декабря 2020 2:39:58″ или после «4 декабря 2021 2:39:58″, сборщик автоматически исправит метку времени. к текущему времени.
Пример
При устранении неполадок, связанных с отметкой времени, вы можете выполнить запрос, аналогичный этому, чтобы увидеть, как анализируется отметка времени:
_sourceCategory=PaloAltoNetworks
| _format as timestampformat
Результат будет выглядеть следующим образом:
Соглашения о временных метках
Следующие соглашения поддерживаются в качестве токенов и могут использоваться в пользовательских форматах временных меток: раздел выше.
Не используйте эпоху с другими токенами.Токен Компонент даты или времени Пример гггг 4-значный год 2012 г.; 2016 г.г. 2-значный год 12; 16 МММ 3-символьный месяц января; март; 90 005 декабря ММ 1- или 2-значный месяц (в году) 1; 01; 9; 09; 12 дд 1- или 2-значный день (в месяце) 1; 01; 16; 30 и AM/PM (без учета регистра) утра; ВЕЧЕРА; являюсь; вечера ЧЧ 1- или 2-значный час (в дне, 0-23) 2; 02; 14; 23 чч 1- или 2-значный час (в сутках, 1-12 с AM/PM) 2; 02; 11; 12 мм 1- или 2-значная минута (в часе) 8; 08; 55 нержавеющая сталь 1- или 2-разрядная секунда (в минуту) 5; 05; 35 ССС 1-3 цифры доли секунды или миллисекунды (в десятичном формате) 4; 58; 944 ззз 3-буквенный часовой пояс UTC; ТИХООКЕАНСКОЕ СТАНДАРТНОЕ ВРЕМЯ; ЕДТ ЗЗЗЗ RFC 822 часовой пояс -0900; +0500 ‘Я’ Буквенный символ Z З «Т» Буквенный символ T Т эпоха 10, 13, 16, 19-значная метка времени с дополнительным . (точка) после 10 цифр. 1496756806.655123456 Часовые пояса
При настройке источника вы можете выбрать один из следующих вариантов:
- Использовать часовой пояс, указанный в ваших файлах журнала, а затем выбрать вариант, если информация о часовом поясе отсутствует в сообщении журнала.
- Заставьте нас полностью игнорировать любую информацию о часовом поясе, присутствующую в журналах, задав часовой пояс.
Важно правильно установить часовой пояс, какой бы вариант вы ни выбрали. Если часовой пояс журналов не может быть определен, мы помечаем их UTC.
Замечания по часовым поясам
Следующие соображения относятся к часовым поясам:
- Мы настоятельно рекомендуем явно задавать часовой пояс для всех источников. Sumo Logic всегда пытается определить часовой пояс источника. Однако, если это невозможно, часовой пояс вернется к UTC. В этих случаях часовой пояс будет неправильным, и это может существенно повлиять на судебный анализ и отчетность.
- Sumo Logic не поддерживает все доступные часовые пояса ISO8601. Например -00 не поддерживается. Таким образом, любые часовые пояса, записанные в этом формате, не обнаруживаются системой. Для случаев этих форматов вам нужно будет указать правильный часовой пояс по умолчанию, который будет использоваться, когда он не обнаружен службой.
В этой статье Википедии приведен список смещений UTC, а в этой статье Википедии — список кодов часовых поясов.
Часовой пояс по умолчанию
По умолчанию мы используем часовой пояс из вашего веб-браузера, установленный операционной системой, чтобы отображать часы и минуты везде в нашем пользовательском интерфейсе. Вы можете изменить часовой пояс по умолчанию, который отображается в пользовательском интерфейсе, отрегулировав Часовой пояс по умолчанию на странице Настройки . Этот параметр переопределяет часовой пояс вашего веб-браузера и изменяет способ отображения часов и минут в пользовательском интерфейсе. Но это личный параметр, который не меняет часовой пояс ни для кого в вашей организации.
Элементы пользовательского интерфейса, на которые влияет этот параметр, включают поле Поиск Страница Диапазон времени , столбец Время панели Сообщения , Панели мониторинга и Обнаружение аномалий.
Изменение параметра Часовой пояс по умолчанию влияет на то, как пользовательский интерфейс отображает сообщения, но не на фактическую метку времени в сообщении журнала.
Например, на следующем снимке экрана показан часовой пояс, установленный на PST в пользовательском интерфейсе в столбце Time . Журналы были собраны из системы, которая также была настроена на использование часового пояса PST , который отображается в отметке времени столбца Сообщение . Временные метки в обоих столбцах совпадают, поскольку они установлены для одного и того же часового пояса.
На следующем снимке экрана показан тот же результат поиска после изменения настройки часового пояса по умолчанию на UTC. Теперь столбец «Время» отображается в формате UTC, а столбец «Сообщение» сохраняет исходную временную метку в формате PST.
В другом примере, если для вашего часового пояса установлено значение UTC , и вы предоставляете панель управления совместно с другим пользователем, часовой пояс которого установлен на PST , что они увидят?
Они увидят те же данные, просто отображаемые с использованием их пользовательского часового пояса. Например, если у вас есть панель, в которой используются временные ряды, временная шкала на оси X диаграммы отображается в вашем часовом поясе 907:43 UTC . Другой пользователь увидит временную шкалу по оси X, отображаемую в его часовом поясе, PST . Но данные, отображаемые на диаграмме, точно такие же.
Диапазоны времени
В поле Диапазон времени на странице Поиск используется часовой пояс, установленный для пользовательского интерфейса Sumo Logic. Это либо часовой пояс по умолчанию, используемый в веб-браузере и установленный операционной системой, либо параметр Часовой пояс по умолчанию на0743 Настройки страница, если вы установили этот параметр.
При создании Запланированного поиска или Оповещения в реальном времени временной диапазон сохраняемого поиска использует часовой пояс, заданный для пользовательского интерфейса Sumo Logic. Если вы изменили часовой пояс с помощью параметра Часовой пояс по умолчанию , этот часовой пояс будет использоваться для запланированных поисков и оповещений в реальном времени.
Параметр Часовой пояс по умолчанию не обновляет автоматически конфигурации существующих запланированных поисков или оповещений в реальном времени. Поэтому важно отметить, что если вы хотите, чтобы ваши запланированные поиски и оповещения в реальном времени использовали тот же часовой пояс, что и ваш пользовательский интерфейс, вам нужно будет отредактировать их для этого и сохранить.
Дополнительную информацию о временных диапазонах см. в разделе Установка временного диапазона поиска.
Диапазоны времени поиска также могут выполнять поиск по всем данным с любыми отметками времени. Дополнительные сведения см. в разделе Использование времени получения.
Формат даты
Если браузер, используемый для доступа к Sumo Logic, находится в месте, где используется формат день/месяц/год вместо месяца/дня/года, даты представлены в этом формате.
- Наверх
- Тип изделия
- Тема
- Источники
- Об источниках
- Теги
- _формат
- авто
- пользовательский формат метки времени
- штамп
- время
- временных диапазонов
- метка времени
- часовых поясов
- устранение неполадок
Формат местного времени/даты
День — — д День месяца, 2 цифры с ведущими нулями 01 до 31 Д Текстовое представление дня, три буквы Пн с по Вс к День месяца без ведущих нулей 1 до 31 л (строчная буква «L») Полное текстовое представление дня недели Воскресенье с по Суббота Н ISO-8601 числовое представление дня недели (добавлено в PHP 5. 1.0) 1 (в понедельник) по 7 (в воскресенье) С Английский порядковый суффикс дня месяца, 2 символа ст , ст , ст или -й . Хорошо работает с j ш Числовое представление дня недели 0 (в воскресенье) по 6 (в субботу) я День года (начиная с 0) 0 от до 365 Неделя — — Ш Номер недели в году по ISO-8601, недели начинаются с понедельника (добавлено в PHP 4.1.0) Пример: 42 (42-я неделя года) Месяц — — Ф Полное текстовое представление месяца, например, январь или март .Январь — Декабрь м Числовое представление месяца с ведущими нулями 01 от до 12 М Краткое текстовое представление месяца, три буквы Январь — Декабрь нет Числовое представление месяца без ведущих нулей 1 от до 12 т Количество дней в данном месяце 28 9с 0304 по 31 Год — — Л Високосный ли год 1 , если год високосный, 0 в противном случае. или Год нумерации недель ISO-8601. Это имеет то же значение, что и Y , за исключением случаев, когда номер недели ISO ( W ) относится к предыдущему или следующему году, тому году вместо этого используется. (добавлено в PHP 5.1.0) Примеры: 1999 или 2003 Д Полное числовое представление года, 4 цифры Примеры: 1999 или 2003 у Двузначное представление года Примеры: 99 или 03 Время — — и Нижний регистр До полудня и После полудня утра или вечера А Заглавные буквы До полудня и После полудня AM или PM Б Swatch Интернет-время 000 от до 999 г 12-часовой формат часа без ведущих нулей 1 от до 12 Г 24-часовой формат часа без ведущих нулей 0 от до 23 ч 12-часовой формат часа с ведущими нулями 01 от до 12 Н 24-часовой формат часа с ведущими нулями 00 от до 23 и Минуты с ведущими нулями 00 до 59 с Секунды с ведущими нулями 00 от до 59 и Микросекунды (добавлено в PHP 5. 2.2). Обратите внимание, что date() всегда будет генерировать 000000 , так как он принимает целое число параметр, тогда как DateTime::format() делает поддерживать микросекунды, если DateTime был созданный с микросекундами. Пример: 654321 Часовой пояс — — и Идентификатор часового пояса (добавлен в PHP 5.1.0) Примеры: UTC , GMT , Атлантика/Азорские острова I (заглавная i) Независимо от того, соответствует ли дата летнему времени 1 при переходе на летнее время, 0 в противном случае. О Разница с временем по Гринвичу (GMT) в часах Пример: +0200 Р Разница со временем по Гринвичу (GMT) с двоеточием между часами и минутами (добавлено в PHP 5. - 16-значное время эпохи. 16 цифр должны быть в самом начале сообщения. Например, 12345678