php разница между датами в днях

DateTime::diff

DateTimeInterface::diff

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Описание

Список параметров

Дата и время для сравнения.

Используется, чтобы вернуть абсолютную разницу.

Возвращаемые значения

DateInterval объект представляет разницу между двумя датами или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования DateTime::diff()

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

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

Объекты DateTime могут сравниваться при помощи операторов сравнения.

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

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

Смотрите также

User Contributed Notes 30 notes

It is worth noting, IMO, and it is implied in the docs but not explicitly stated, that the object on which diff is called is subtracted from the object that is passed to diff.

$date1 = new DateTime(‘now’);
$date2 = new DateTime(‘tomorrow’);

In some situations, this won’t say «in 1 days», but «in 0 days».
I think this is because «now» is the current time, while «tomorrow» is the current day +1 but at a default time, lets say:

Now: 08:00pm, 01.01.2015
Tomorrow: 00:00am, 02.01.2015

In this case, the difference is not 24 hour, so it will says 0 days.

Better use «today», which should also use a default value like:

Today: 00:00am, 01.01.2015
Tomorrow: 00:00am, 02.01.2015

which now is 24 hour and represents 1 day.

This may sound logical and many will say «of course, this is right», but if you use it in a naiv way (like I did without thinking), you can come to this moment and facepalm yourself.

Conclusion: «Now» is «Today», but in a different clock time, but still the same day!

After wrestling with DateTime::diff for a while it finally dawned on me the problem was both in the formatting of the input string and the formatting of the output.

The task was to calculate the duration between two date/times.

1. Make sure you have a valid date variable. Both of these strings are valid:

$strStart = ‘2013-06-19 18:25’ ;
$strEnd = ’06/19/13 21:47′ ;

?>

2. Next convert the string to a date variable

3. Calculate the difference

4. Format the output

[Modified by moderator for clarify]

Using the identical (===) comparision operator in different but equal objects will return false

If you want to quickly scan through the resulting intervals, you can use the undocumented properties of DateInterval.

The function below returns a single number of years, months, days, hours, minutes or seconds between the current date and the provided date. If the date occurs in the past (is negative/inverted), it suffixes it with ‘ago’.

It seems that while DateTime in general does preserve microseconds, DateTime::diff doesn’t appear to account for it when comparing.

= ‘2014-03-18 10:34:09.939’ ;
$val2 = ‘2014-03-18 10:34:09.940’ ;

To work around this apparent limitation/oversight, you have to additionally compare using DateTime::format.

I needed to get the exact number of days between 2 dates and was relying on the this diff function, but found that I was getting a peculiar result with:

I had to end up using :

Though I found a number of people who ran into the issue of 5.2 and lower not supporting this function, I was unable to find any solid examples to get around it. Therefore I hope this can help some others:

Источник

Как правильно вычислить разницу между двумя заданными датами php [дубликат]

Как вычислить количество дней между двумя датами?

Пробовал так, но не получается:

php разница между датами в днях. Смотреть фото php разница между датами в днях. Смотреть картинку php разница между датами в днях. Картинка про php разница между датами в днях. Фото php разница между датами в днях

4 ответа 4

записаны в varchar в такой форме 03/14/2019.

Это неправильно. Дата должна быть записана в БД в формате 2019-03-13.
Поэтому перед записью в базу ее надо переформатировать.

после этого разницу можно будет получить прямо в запросе:

php разница между датами в днях. Смотреть фото php разница между датами в днях. Смотреть картинку php разница между датами в днях. Картинка про php разница между датами в днях. Фото php разница между датами в днях

php разница между датами в днях. Смотреть фото php разница между датами в днях. Смотреть картинку php разница между датами в днях. Картинка про php разница между датами в днях. Фото php разница между датами в днях

php разница между датами в днях. Смотреть фото php разница между датами в днях. Смотреть картинку php разница между датами в днях. Картинка про php разница между датами в днях. Фото php разница между датами в днях

Лучше всего это сделать не средствами php, а средствами самого MySQl в запросе. Например что-то вроде:

select DATEDIFF(DATE_FORMAT(arrival,’%d/%m/%Y’),DATE_FORMAT(departure,’%d/%m/%Y’)) as duration from tablename;

php разница между датами в днях. Смотреть фото php разница между датами в днях. Смотреть картинку php разница между датами в днях. Картинка про php разница между датами в днях. Фото php разница между датами в днях

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php mysql или задайте свой вопрос.

Связанные

Похожие

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.4.40656

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

date_diff

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Описание

Эта функция является псевдонимом: DateTime::diff()

User Contributed Notes 20 notes

Powerful Function to get two date difference.

/*
* A mathematical decimal difference between two informed dates
*
* Author: Sergio Abreu
* Website: http://sites.sitesbr.net
*
* Features:
* Automatic conversion on dates informed as string.
* Possibility of absolute values (always +) or relative (-/+)
*/

/* Enjoy and feedback me 😉 */
?>

This behavior looks really weird to me :

PHP is usually relaxed when it comes to data types however that is not the case with date and time. If all you need to do is compare a string date against today’s date you need to do the following:

//Output the array:
echo » ;
?>

This will output the following:

Array
(
[y] => 4
[m] => 10
[d] => 22
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 1
[days] => 1787
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)

So you can simply use:

Even the top rated comment here, Sergio Abreu’s, doesn’t treat leap years entirely correctly. It should work between 1901 and 2099, but outside that it’ll be a little off.

If you want to find out the number of days between two dates, use below. You can change to a different unit from that. It looks a little insane, but keep in mind the full set of rules for leap years:

So in the functions below, we find the total numbers of days in full years since the mythical 1/1/0001, then add the number of days before the current one in the year passed. Do this for each date, then return the absolute value of the difference.

diff from datetime

My simple function to count up the number of weekdays between the dates (inclusive for both ends), one can add a holidays between the dates to take them into account as well as the weekends, the weekend days could also be changed.

This is a very simple function to calculate the difference between two datetime values, returning the result in seconds. To convert to minutes, just divide the result by 60. In hours, by 3600 and so on.

Here you have in this post http://softontherocks.blogspot.com/2014/12/calcular-la-edad-con-php.html the code to get the age of a person specifying the date of birth:

here a little solution of problem of missing date_diff function with php versions below 5.3.0

Here is how I solved the problem of missing date_diff function with php versions below 5.3.0
The function accepts two dates in string format (recognized by strtotime() hopefully), and returns the date difference in an array with the years as first element, respectively months as second, and days as last element.
It should be working in all cases, and seems to behave properly when moving through February.

I had to find the difference between two days (here is my solution without Date_diff()) :

This function will return count of sunday between inputed dates.

Other data_diff aviable for php5.3>=

Источник

Как вычислить разницу между двумя датами с помощью PHP?

у меня есть две даты в виде:

теперь мне нужно найти разницу между этими двумя в следующей форме:

Как я могу это сделать в PHP?

30 ответов

вы можете использовать strtotime() для преобразования двух дат во время unix, а затем вычислить количество секунд между ними. Из этого довольно легко вычислить различные периоды времени.

Edit: очевидно, что предпочтительный способ сделать это, как описано ниже Юрка. Мой код обычно рекомендуется только если у вас нет PHP 5.3 или лучше.

несмотря на все это, я решил обращаться с жалобами. Если вам действительно нужен точный диапазон, но у вас нет доступа к PHP 5.3, используйте код ниже (он также должен работать в PHP 4). Это прямой порт кода, который PHP использует внутри для расчета диапазонов, за исключением того, что он не учитывает летнее время. Это означает, что он выключен максимум на час, но за исключением этого он должен быть правильным.

Я предлагаю использовать объекты DateTime и DateInterval.

начиная с PHP 5.2.2, объекты DateTime можно сравнивать с помощью операторов сравнения.

лучший курс действий-использование PHP DateTime DateInterval ) объекты. Каждая дата инкапсулируется в DateTime объект, а затем разница между ними может быть сделана:

на DateTime объект примет любой формат strtotime() будет. Если требуется еще более конкретный формат даты, DateTime::createFromFormat() можно использовать для создания DateTime объект.

после создания экземпляра обоих объектов вы вычитаете один из другого с помощью DateTime::diff() .

$difference теперь DateInterval объект с информацией разницу. А var_dump() выглядит так:

в формате DateInterval объект, нам нужно проверить каждое значение и исключить его, если это 0:

просмотр часов и минут и секунд..

взгляните на следующую ссылку. Это лучший ответ, который я нашел до сих пор.. 🙂

не имеет значения, какая дата раньше или позже, когда вы проходите в параметры даты. Функция использует абсолютное значение PHP ABS() для всегда возвращайте положительное число как количество дней между двумя даты.

имейте в виду, что количество дней между двумя датами не включительно. Так что, если вы ищете количество дней представлено всеми датами между и включая введенные даты, вам нужно будет добавить один (1) к результату этой функции.

Я голосовал за Юрка ‘ s ответ как это мой любимый, но у меня есть pre-php.5.3 версии.

я получил оригинальную идею от здесь, который я изменил для моего использования (и я надеюсь, что моя модификация будет отображаться на этой странице).

Я не знаю, используете ли вы фреймворк PHP или нет, но многие фреймворки PHP имеют библиотеки даты/времени и помощники, которые помогут вам не изобретать колесо.

Источник

Работа с датами в PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.

Функция time, формат timestamp

Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени. Такое представление даты называется форматом timestamp.

Зачем нужен timestamp?

Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.

С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:

Функция mktime

Функция mktime работает аналогично функции time, но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:

Полученная разница в секундах будет выглядеть так: 686663237 (обновите страницу и это число поменяется).

Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.

Функция date

Функция date выводит текущие дату и время в заданном формате.

Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).

Примеры работы с date:

Второй параметр функции date

Функция date имеет второй необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):

Функция strtotime

Следующая полезная функция, которую мы разберем, называется strtotime.

К примеру, я могу передать ей строку ‘2025-12-31’ и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.

Все форматы можно посмотреть тут.

Следующий код вернет дату предыдущего понедельника:

Как добавить или отнять дату

Пример 1

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате ‘день.месяц.год’

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

Пример 2

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате ‘день.месяц.год’

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

Пример 3

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате ‘день.месяц.год’

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

Пример 4

Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате ‘день.месяц.год’

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

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *