- date_diff
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- date_diff
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes
- Разница дат (PHP)
- Функция date_diff()
- Пример
- Результат
- Послесловие
- Категории
- Читайте также
- Комментарии
- Вход на сайт
- Социальные сети
- php. Datetime разница между датами в секундах и минутах
- Сравнение даты — времени с интервалом на PHP
- Класс DateInterval
- Функция сравнения даты с интервалом и выводом результата в секундах.
date_diff
Возвращает разницу между двумя DateTimeInterface объектами.
Список параметров
Дата и время для сравнения.
Используется, чтобы вернуть абсолютную разницу.
Возвращаемые значения
DateInterval объект представляет разницу между двумя датами или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования DateTime::diff()
$datetime1 = new DateTime ( ‘2009-10-11’ );
$datetime2 = new DateTime ( ‘2009-10-13’ );
$interval = $datetime1 -> diff ( $datetime2 );
echo $interval -> format ( ‘%R%a дней’ );
?>?php
$datetime1 = date_create ( ‘2009-10-11’ );
$datetime2 = date_create ( ‘2009-10-13’ );
$interval = date_diff ( $datetime1 , $datetime2 );
echo $interval -> format ( ‘%R%a дней’ );
?>?php
Результат выполнения данных примеров:
Пример #2 Сравнение объектов DateTime
Замечание:
В PHP 5.2.2 объекты DateTime сравнивались при помощи операторов сравнения.
$date1 = new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );
?php
var_dump ( $date1 == $date2 );
var_dump ( $date1 < $date2 );
var_dump ( $date1 > $date2 );
?>
Результат выполнения данного примера:
bool(false) bool(true) bool(false)
Смотрите также
- DateInterval::format() — Форматирует интервал
- DateTime::add() — Добавляет заданное количество дней, месяцев, лет, часов, минут и секунд к объекту DateTime
- DateTime::sub() — Вычитает заданное количество дней, месяцев, лет, часов, минут и секунд из времени объекта DateTime
date_diff
Возвращает разницу между двумя объектами DateTimeInterface .
Список параметров
Дата и время для сравнения.
Используется, чтобы вернуть абсолютную разницу.
Возвращаемые значения
DateInterval объект представляет разницу между двумя датами.
Возвращаемое значение более конкретно представляет временной интервал для применения к исходному объекту ( $this или $originObject ), чтобы прийти к $targetObject . Этот процесс не всегда обратим.
Метод учитывает смену часовых поясов и поэтому может возвращать интервал 24 hours and 30 minutes , как в одном из примеров. Если вы хотите рассчитывать по абсолютному времени, вам необходимо сначала преобразовать $this / $baseObject и $targetObject в UTC.
Примеры
Пример #1 Пример использования DateTimeImmutable::diff()
$origin = new DateTimeImmutable ( ‘2009-10-11’ );
$target = new DateTimeImmutable ( ‘2009-10-13’ );
$interval = $origin -> diff ( $target );
echo $interval -> format ( ‘%R%a дней’ );
?>?php
$origin = date_create ( ‘2009-10-11’ );
$target = date_create ( ‘2009-10-13’ );
$interval = date_diff ( $origin , $target );
echo $interval -> format ( ‘%R%a дней’ );
?>?php
Результат выполнения данных примеров:
Пример #2 Пример использования DateTimeInterface::diff() во время перехода на летнее время
$originalTime = new DateTimeImmutable ( «2021-10-30 09:00:00 Europe/London» );
$targedTime = new DateTimeImmutable ( «2021-10-31 08:30:00 Europe/London» );
$interval = $originalTime -> diff ( $targedTime );
echo $interval -> format ( «%H:%I:%S (Полных дней: %a)» ), «\n» ;
?>?php
Результат выполнения данного примера:
Пример #3 Сравнение объектов DateTime
$date1 = new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );
?php
var_dump ( $date1 == $date2 );
var_dump ( $date1 < $date2 );
var_dump ( $date1 > $date2 );
?>
Результат выполнения данного примера:
bool(false) bool(true) bool(false)
Смотрите также
- DateInterval::format() — Форматирует интервал
- DateTime::add() — Изменяет объект DateTime, добавляя количество дней, месяцев, лет, часов, минут и секунд
- DateTime::sub() — Изменяет указанный объект DateTime, вычитая указанный объект DateInterval.
User Contributed Notes
Разница дат (PHP)
Для того что бы посчитать разницу между двумя датами в PHP, нужно обе даты перевести в секунды при помощи функции int strtotime(string time [, int now]) , и вычислить разницу. Результат и будет разницей.
Функция date_diff()
Напишем функцию int date_diff($date1, $date2) , которая будет принимать два параметра (дата 1 и дата 2) и возвращать разницу в секундах.
Пример
В приведенном примере, обрабатывается несколько вариантов форматов дат.
‘; $date1 = ’10 September 2010′; $date2 = ’29 September 2009′; echo date_diff($date1, $date2).’ сек.
‘; $date1 = ‘next Thursday’; $date2 = ‘last Monday’; echo date_diff($date1, $date2).’ сек.
‘; $date1 = ‘now’; $date2 = ‘2011-01-01 00:00:01′; // этот результат будет всегда разным echo date_diff($date1, $date2).’ сек.
‘; ?>?php>
Результат
41705135 сек.
29894400 сек.
864000 сек.
10273762 сек.
Послесловие
Если хотите секунды преобразовать в нормальную дату, то прочитайте статью: Секунды в дни-часы-минуты (PHP)
Категории
Читайте также
- Количество секунд между датами (PHP)
- Количество минут между датами (PHP)
- Количество дней между датами (PHP)
- Количество часов между датами (PHP)
- Посчитать сколько времени прошло (PHP)
- Время выполнения скрипта (PHP)
- Количество секунд от начала дня (PHP)
- Как получить TIMESTAMP дня текущей недели (PHP)
- Преобразовать дату в секунды (PHP)
- Установить часовой пояс (PHP)
- Дата вчера сегодня завтра (PHP)
- Название предыдущего месяца (PHP)
Комментарии
Вход на сайт
Введите данные указанные при регистрации:
Социальные сети
Вы можете быстро войти через социальные сети:
php. Datetime разница между датами в секундах и минутах
Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Вычисляем разницу между датами в формате DateTime в секундах и минутах.
Условие:
Есть 2 даты в виде DateTime объекта.
Нужно найти разницу между датами только в секундах или в минутах.
Решение:
За первую дату я возьму текущую дату.
$b = (new \DateTime('now'))->add(new \DateInterval("PT15M")); // К текущей дате и времени прибавляю 15 минут
Мы получили не наши 90 ожидаемых минут, а 1 час и 30 минут.
Для того, чтобы получить разницу в минутах можно сделать следующее:
Переводим наши даты в формат Timestamp и от одной даты отнимаем другую.
$secondDifference = ($b->getTimestamp() - $a->getTimestamp()); // Разница между датами в секундах
Таким образом мы получили разницу между датами в секундах.
Результат полученной разницы в секундах (15 минут = 900 секунд):
$minuteDiference = ($secondDifference / 60) % 60; // В одной минуте 60 секунд + округляем число до целого
$a = new \DateTime('now'); $b = (new \DateTime('now'))->add(new \DateInterval("PT15M")); $secondDifference = ($b->getTimestamp() - $a->getTimestamp()); // Разница между датами в секундах $minuteDiference = ($secondDifference / 60 % 60);
Сравнение даты — времени с интервалом на PHP
При организации вывода интерактизных блоков на сайте возникла необходимость формировать доступ к их редактированию только в течении 20 минут после создания. По традиции сформировал и задал вопрос к AI ChatGPT :
Нужно на PHP сравнить дату-время в формате Y-m-d H:i:s c текущим временем плюс 20 минут и если исходное меньше текущего плюс 20 минут, то вывести true, а если меньше — false. Код с пояснениями.
Ответ от AI ChatGPT :
$datetime = ‘2022-12-31 23:40:00’; // исходная дата-время в формате Y-m-d H:i:s $interval = new DateInterval(‘PT20M’); // создаем интервал в 20 минут $now = new DateTime(); // текущее время $now->add($interval); // добавляем интервал в 20 минут к текущему времени if (new DateTime($datetime) < $now) < // сравниваем исходную дату-время с текущим временем + 20 минут echo "true"; >else
В первой строке мы задаем исходную дату-время в формате Y-m-d H:i:s .
Во второй строке мы создаем интервал в 20 минут с помощью класса DateInterval .
В третьей строке мы создаем объект DateTime для текущего времени и добавляем к нему интервал в 20 минут с помощью метода add .
Затем мы сравниваем исходную дату-время, преобразованную в объект DateTime , с текущим временем + 20 минут. Если исходная дата-время меньше текущего времени + 20 минут, мы выводим » true «, в противном случае выводим » false «.
Ответ получился рабочий, но мне захотелось получить функцию с применением DateTimeImmutable . Для этого пришлось немного изменить вопрос:
Нужна функция на PHP которая сравнивает передаваемую в неё дату-время в формате Y-m-d H:i:s c текущим временем плюс 20 минут и если исходное меньше текущего плюс 20 минут, то вернуть true, а если меньше — false . Использовать DateTimeImmutable . Код с пояснениями.
Ответ 2 от AI ChatGPT :
function compareDateTime(string $dateString): bool < $date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dateString); $nowPlus20 = (new DateTimeImmutable())->add(new DateInterval(‘PT20M’)); return $date
Давайте разберемся, что здесь происходит:
- Мы создаем функцию compareDateTime , которая принимает один аргумент — строку с датой-временем в формате Y-m-d H:i:s .
- Создаем объект DateTimeImmutable из переданной строки даты.
- Создаем объект DateTimeImmutable для текущего времени и добавляем к нему интервал в 20 минут с помощью метода add() . Полученный результат сохраняем в переменную $nowPlus20 .
- Сравниваем дату из аргумента функции с $nowPlus20 и возвращаем true , если она меньше, и false в противном случае.
Обратите внимание на использование класса DateInterval , который позволяет добавлять к дате или времени определенный интервал. В данном случае мы добавляем интервал в 20 минут ( PT20M ).
Ответ в виде функции с применением DateTimeImmutable тоже отлично работает, но ещё и более компактен.
Класс DateInterval
Класс DateInterval принимает следующие аргументы:
- P < n >Y — количество лет (n может быть десятичным числом)
- P < n >M — количество месяцев (n может быть десятичным числом)
- P < n >D — количество дней (n может быть десятичным числом)
- PT < n >H — количество часов (n может быть десятичным числом)
- PT < n >M — количество минут (n может быть десятичным числом)
- PT < n >S — количество секунд (n может быть десятичным числом)
Для создания объекта DateInterval , передайте строку, содержащую нужные значения, в конструктор класса DateInterval . Например:
$interval = new DateInterval('P1Y2M3DT4H5M6S'); //В этом случае, $interval будет содержать интервал времени в 1 год, 2 месяца, 3 дня, 4 часа, 5 минут и 6 секунд.
Класс DateInterval также принимает несколько других аргументов, таких как:
- $days — количество дней (может быть отрицательным)
- $hours — количество часов (может быть отрицательным)
- $minutes — количество минут (может быть отрицательным)
- $seconds — количество секунд (может быть отрицательным)
- $microseconds — количество микросекунд (может быть отрицательным)
Пример создания объекта DateInterval с помощью этих аргументов:
$interval = new DateInterval('P1Y2M3DT4H5M6S'); $interval->d = 7; $interval->h = 12; $interval->i = 30; $interval->s = 45; $interval->f = 0.5;
В этом случае, $interval будет содержать интервал времени в 1 год, 2 месяца, 3 дня, 12 часов, 30 минут, 45 секунд и 500 миллисекунд.
Функция сравнения даты с интервалом и выводом результата в секундах.
Немного изменим задачу. Допустим нам нужно чтобы функция отдавала разницу в секундах от текущего значения времени до времени которое подаётся в функцию + заданный интервал. В случае если разница имеет отрицательное значение функция вернёт falshe.
Вот вопрос к AI : Нужна php функция. На вход подаётся: Первый параметр строка дата-время из базы данных в формате ` Y-m-d H:i:s `, второй параметр — интервал в минутах $interval . Функция прибавляет к первому параметру интервал $interval , а затем полученный результат сравнивает с текущим временем сервера, если текущее время меньше результата суммы входных параметров, то вычисляет разницу в секундах и возвращает на выход функции, а если нет, то возвращает falshe.
Ответ 3 от AI ChatGPT :
Вот пример PHP функции, которая должна делать то, что вы описали:
function compareDateTime($dateTimeStr, $interval) < // Преобразуем строку даты-времени в объект DateTime $dateTime = DateTime::createFromFormat('Y-m-d H:i:s', $dateTimeStr); // Добавляем интервал в минутах к дате-времени $dateTime->add(new DateInterval('PT'.$interval.'M')); // Получаем текущую дату-время сервера $now = new DateTime(); // Сравниваем дату-время из базы с текущей датой-временем сервера if ($dateTime > $now) < // Вычисляем разницу в секундах между двумя датами $diff = $dateTime->getTimestamp() - $now->getTimestamp(); return $diff; > else < return false; >> //Пример использования: $dateTimeStr = '2021-08-30 12:00:00'; $interval = 30; $result = compareDateTime($dateTimeStr, $interval); if ($result !== false) < echo 'Разница в секундах: '.$result; >else < echo 'Текущее время больше, чем дата-время + интервал';
Обратите внимание, что в этом примере мы не используем тройные обратные кавычки и markdown, так как результат функции предполагается выводить не в виде таблицы или кода, а просто в виде строки.
Функция отлично справляется со своей задачей например, в комментировании постов на сайте. После создания пользователем сообщения и его публикации часто случается, что содержание содержит ошибку или описку. Конечно нужно дать возможность исправления текста но оганичить по времени, допустим 15 минут. Зачем ограничивать? Да по многим причинам - например, не дать изменять текст после модерации или когда уже ответили на это сообщение, или через длительное время кто-то захочет некрасиво поумничить, а ветка уже затерялась во времени. Самое то, это дать на редактирование 10-20 минут, а после модерации вообще запретить к редактированию.
Дата публикации: 2023-04-29