Php узнать разницу времени

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 дней’ );
?>

$datetime1 = date_create ( ‘2009-10-11’ );
$datetime2 = date_create ( ‘2009-10-13’ );
$interval = date_diff ( $datetime1 , $datetime2 );
echo $interval -> format ( ‘%R%a дней’ );
?>

Результат выполнения данных примеров:

Пример #2 Сравнение объектов DateTime

Замечание:

В PHP 5.2.2 объекты DateTime сравнивались при помощи операторов сравнения.

$date1 = new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );

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 дней’ );
?>

$origin = date_create ( ‘2009-10-11’ );
$target = date_create ( ‘2009-10-13’ );
$interval = date_diff ( $origin , $target );
echo $interval -> format ( ‘%R%a дней’ );
?>

Результат выполнения данных примеров:

Пример #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» ;
?>

Результат выполнения данного примера:

Пример #3 Сравнение объектов DateTime

$date1 = new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );

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).’ сек.
‘; ?>

Результат

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

Давайте разберемся, что здесь происходит:

  1. Мы создаем функцию compareDateTime , которая принимает один аргумент — строку с датой-временем в формате Y-m-d H:i:s .
  2. Создаем объект DateTimeImmutable из переданной строки даты.
  3. Создаем объект DateTimeImmutable для текущего времени и добавляем к нему интервал в 20 минут с помощью метода add() . Полученный результат сохраняем в переменную $nowPlus20 .
  4. Сравниваем дату из аргумента функции с $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

Источник

Читайте также:  Streams tutorial in java
Оцените статью