- PHP | Дата и время
- Функция PHP date()
- Синтаксис
- Параметры функции date():
- Пример
- Как всегда в футере выводить текущий год?
- Пример
- Определите свой часовой пояс
- Пример
- Функция PHP mktime()
- Операции с датами и временем Unixtime в PHP
- Получение временных меток и дат
- Число дня недели
- Числа месяца
- Текущий месяц:
- Преведущий месяц:
- Следующий месяц:
- Число дней в текущем месяце
- Порядковый номер недели
- Число дней в текущем году
- Текущий квартал
- Арифметические операции
- Прибавить к дате 10 секунд
- Прибавить к дате 10 минут
- Прибавить к дате 1 час
- Прибавить к дате 1 день
- Прибавить к дате неделю
- Прибавить к дате месяц
- Прибавить к дате год
- Сколько прошло
- Сколько прошло c 8:00
- Сколько прошло c понедельника этой недели
- Сколько прошло c начала года
- Сколько прошло c определённой даты
- Сколько остается
- Сколько остается до 23:00
- Сколько остается до конца недели
- Сколько остается до конца месяца
- Сколько остается до конца года
- Сколько остается до определенной даты
- Время между датами
- Количество часов между датами
- Количество дней между датами
- Количество месяцев между датами
- Комментарии 2
- Другие публикации
PHP | Дата и время
В этом уроке рассмотрм, как на практике использовать функции PHP по получению даты и времени, а также рассмотрим способы вывода и форматирования даты и времени. Функции PHP, обрабатывающие дату и время, позволяют получать дату и время с того сервера, на котором выполняется сценарий. Также эти функции позволяют нам редактировать и форматировать полученные временные значения перед их отображением (выводом) на экран.
Функция PHP date()
Функция date() выводит текущие дату и время в заданном формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат.
Синтаксис
Параметры функции date():
format Обязательный. Задает формат метки времени timestamp Необязательный. Задает отметку времени. По умолчанию текущая дата и время
Функция date() возвращает строку, которая отформатирована в соответствии с указанным шаблоном format . Параметр timestamp задает метку времени. Если timestamp не задан, тогда используется текущее системное время.
Примечание: Отметка времени — это последовательность символов, обозначающая дату и / или время, когда произошло определенное событие.
Обязательный параметр format функции date() указывает, как форматировать дату (или время). Формат задается управляющими командами (латиницей), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Ниже представлена таблица с расшифровкой некоторых символов в строке 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 |
Ниже представлены некоторые примеры получения фактической информации о дате и времени:
Пример
echo "Отображение текущей даты: " . date('d-m-Y') . "
";
echo "Отображение текущего времени: " . date('H:i:s') . "
";
echo "Отображение текущей даты и времени: " . date('d-m-Y H:i:s') . "
";
echo "Отображение текущей даты и времени в длинном формате: " . date('d F Y, D - g:i:s A');
?>
Как всегда в футере выводить текущий год?
Используйте функцию date() для автоматического обновления года в футере вашего веб-сайта:
Пример
Copyright © 2014- Все права защищены.
Результат выполнения кода:
Примечание: Обратите внимание, что функция PHP date() вернет текущую дату / время сервера!
Определите свой часовой пояс
Если сервер, на котором расположен ваш сайт, находится в другой стране или настроен для другого часового пояса, то текущее время, возвращаемое функцией date(), будет отличаться от реального времени вашего часового пояса.
Итак, если вам нужно, чтобы время было правильным для вашего региона, вы можете установить часовой пояс, который хотите использовать.
Функция date_default_timezone_set() устанавливает временную зону по умолчанию для всех функций даты и времени в скрипте.
Параметр timezone_identifier — это идентификатор временной зоны.
Функция date_default_timezone_set() устанавливает часовой пояс, который по умолчанию используется всеми дата/время функциями в сценарии. Чтобы изменить значение часового пояса для вашего веб-сайта, достаточно в начале скрипта задать функцию date_default_timezone_set() , параметром которой будет служить название часового пояса.
В приведенном ниже примере для часового пояса устанавливается значение ‘Europe/Moscow’, а затем выводится текущее время в указанном формате:
Пример
echo "Текущее время в Москве " . date("h:i:sa");
date_default_timezone_set('Europe/Kiev');
echo "Текущее время в Киеве " . date("h:i:sa");
?>
Функция PHP mktime()
Необязательный параметр timestamp функции date() указывает временную метку. Если она не указано, будут использоваться текущая дата и время (как в примерах выше).
Но если вам нужно получить метку времени в прошлом или будущем, то сделать это можно с помощью функции mktime() . Вам нужно указать нужную дату, и она возвращается с меткой времени Unix. Метка времени Unix содержит количество секунд между эпохой Unix (1 января 1970 г., 00:00:00 GMT) и указанным временем.
Синтаксис данной функции следующий:
Здесь используются следующие данные:
hour Количество часов, прошедших с начала дня, указанного параметрами month, day и year. minute Количество минут, прошедших от начала часа, указанного параметром hour. second Количество секунд, прошедших от начала минуты, указанной параметром minute. month Количество месяцев, прошедших с конца предыдущего года. day Количество дней, прошедших с конца предыдущего месяца. year Номер года, может быть указан двумя или четырьмя цифрами.
Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты/времени.
Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет «Jan-01-1921»:
Операции с датами и временем Unixtime в PHP
Unix-время (англ. Unix time, также POSIX-время) — система описания моментов во времени. Определяется как количество секунд, прошедших с полуночи 1 января 1970 года.
В PHP текущую метку времени возвращает функция time() и функция strtotime(), также с unix-метками работает класс DateTime.
Получение временных меток и дат
Число дня недели
// Понедельник текущей недели: $time = strtotime('this week monday, 00:00'); echo date('d.m.Y H:i', $time); // 24.07.2023 00:00 // Понедельник предыдущий недели: $time = strtotime('previous week monday, 00:00'); echo date('d.m.Y H:i', $time); // 17.07.2023 00:00 // Понедельник следующей недели: $time = strtotime('next monday, 00:00'); echo date('d.m.Y H:i', $time); // 31.07.2023 00:00
Числа месяца
Текущий месяц:
// Первый день текущего месяца: $time = strtotime('first day of this month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.07.2023 00:00:00 // Последний день текущего месяца: $time = strtotime('last day of this month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.07.2023 23:59:00
Преведущий месяц:
// Первый день предыдущего месяца: $time = strtotime('first day of previous month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.06.2023 00:00:00 // Последний день предыдущего месяца: $time = strtotime('last day of previous month 23:59'); echo date('d.m.Y H:i:s', $time); // 30.06.2023 23:59:00
Следующий месяц:
// Первый день следующего месяца: $time = strtotime('first day of next month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.08.2023 00:00:00 // Последний день следующего месяца: $time = strtotime('last day of next month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.08.2023 23:59:00
Число дней в текущем месяце
Порядковый номер недели
Число дней в текущем году
echo date('L') ? 366 : 365; // 365
Текущий квартал
echo intval((date('n') + 2) / 3); // 3
Арифметические операции
Для сложения и вычитания времени можно применить функцию strtotime() или просто работать с секундами:
1 минута | 60 секунд | 10 минут | 600 секунд |
1 час | 3600 секунд | 10 часов | 36000 секунд |
1 день | 86400 секунд | 2 дня | 172800 секунд |
1 неделя | 604800 секунд | 2 недели | 1209600 секунд |
1 месяц | 2629743 секунд | 2 месяца | 5259486 секунд |
1 год | 31556926 секунд | 2 года | 63072000 секунд |
Прибавить к дате 10 секунд
$time = time() + 10; echo date('d.m.Y H:i:s', $time); // 25.07.2023 20:43:50 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 25.07.2023 20:43:50
Прибавить к дате 10 минут
$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 25.07.2023 20:53:40 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 25.07.2023 20:53:40
Прибавить к дате 1 час
$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 25.07.2023 21:43:40 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 25.07.2023 21:43:40
Прибавить к дате 1 день
$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 26.07.2023 20:43:40 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 26.07.2023 20:43:40
Прибавить к дате неделю
$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 01.08.2023 20:43:40
Прибавить к дате месяц
$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 25.08.2023 20:43:40
Прибавить к дате год
$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 25.07.2024 20:43:40
Сколько прошло
Сколько прошло c 8:00
$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // 12,7 часов
Сколько прошло c понедельника этой недели
$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 45 часов echo round($diff / 86400, 1); // 1,9 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько прошло c начала года
$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 205 дней // или echo date('z'); // 205
Сколько прошло c определённой даты
$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 60981 часов echo round($diff / 86400); // 2541 дней
Сколько остается
Сколько остается до 23:00
$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 2,3 часов
Сколько остается до конца недели
$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 123 часов echo round($diff / 86400); // 5 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько остается до конца месяца
$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 147 часов echo round($diff / 86400); // 6 дней
Сколько остается до конца года
$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3819 часов echo round($diff / 86400); // 159 дней
Сколько остается до определенной даты
$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 17907 часов echo round($diff / 86400); // 746 дней
Время между датами
Количество часов между датами
$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 3600); // 1640
Количество дней между датами
$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 68,3
Количество месяцев между датами
$date_1 = strtotime('01.01.2021 10:00'); $date_2 = strtotime('10.03.2021 18:00'); $months = 0; while (strtotime('+1 month', $date_1) < $date_2) < $months++; $date_1 = strtotime('+1 month', $date_1); >$days = round(($date_2 - $date_1) / (60 * 60 * 24)); echo $months . ' месяца, ' . $days . ' дней'; // 2 месяца, 9 дней
Комментарии 2
Специально не поленился и авторизовался, чтобы выразить благодарность авторам сайта, молодцы ребята! Неоднократно на вашем сайте получал именно нужную инфу, у вас все примеры разжеваны, с разными вариантами, не то что где нибудь найдешь вроде то, что тебе нужно и потом полдня думаешь, как под свою задачу это допилить. В данном случае мне нужно было кол-во дней между датами, при чем число должно быть дробным — то есть 3.6 дня, например. У вас нашел, скопировал, и вставил (только имена переменных поменял), все. Именно то, что нужно. И так бывало уже не раз. В общем, спасибо, и обязательно продолжайте в том же духе!
Авторизуйтесь, чтобы добавить комментарий.
Другие публикации
Заголовок Last-Modified помогает оптимизировать загрузку web-страниц и облегчить работу поисковым роботам.