сравнение двух дат php

Сравнение дат в PHP с помощью функции StrToTime ()

Пример

Приведенный выше пример прекрасно подходит для отображения дат и времени. Но когда дело доходит до PHP сравнения дат, использовать удобные для чтения строки — не самый надежный способ. Намного эффективнее сравнить временные метки. Метка времени Unix содержит количество секунд между 1 января 1970 00:00:00 GMT и указанным временем. Это означает, что можно сравнивать даты вплоть до секунд.

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

В свою очередь функция strtotime() может преобразовать текстовое представление даты/времени в метку времени:

Если при PHP сравнении даты с текущей функция strtotime() получает дату/время, в которых день и месяц располагаются перед годом, эта запись будет интерпретироваться по-разному, в зависимости от используемого разделителя. При использовании косой черты в качестве разделителя функция возвратит метку времени в американском формате ( м/д/г ). При использовании в качестве разделителя тире или точки функция возвратит метку в европейском формате ( д-м-г ).

Как можно увидеть ниже, первая метка времени отличается от двух последних:

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

При сравнении двух дат в PHP внутри цикла while время ( в данном случае семь дней ) добавляется к дате начала и производится проверка, чтобы убедиться больше ли полученная временная метка, чем временная метка даты начала.

Пожалуйста, оставьте свои отзывы по текущей теме материала. За комментарии, лайки, подписки, дизлайки, отклики низкий вам поклон!

Источник

Сравнение дат

Насколько коректно сравнивать даты таким образом?

Раньше знаю надо было переводить в разные таймштампы, но похоже сейчас, если задать дату именно в таком формате. все должно быть ок, разве не так?

3 ответа 3

Если обе даты точно в формате Y-m-d (или Y-m-d H:i:s ), то логично сравнивать их как строки, т.е.

Но если нет уверенности, что формат дат одинаковый, то лучше привести их к формату unixtime и сравнивать как числа:

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

Воспользуйтесь функцией strtotime, т.е. переведите ваши строки, которые вы получаете через date в метку времени unix, т.е. в число int и тогда удобно можно сравнить

Сравнивать как строки даты нельзя не в коем случае, это будет не корректно в случае если у вас:

Конечно формат 2011-02-12 вернет корректное сравнение, но это потенциально опасный код.

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

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

Связанные

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

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

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

Источник

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

Даны две даты (date1 и date2), и задача состоит в том, чтобы сравнить данные даты. Сравнение двух дат в PHP простое, когда обе даты находятся в одном и том же формате, но проблема возникает, когда обе даты находятся в другом формате.

Метод 1: Если данные даты имеют одинаковый формат, используйте простой оператор сравнения для сравнения дат.

Пример:

// PHP программа для сравнения дат

// Объявляем две даты и
// инициализируем это

// Используем оператор сравнения для
// сравниваем даты

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

Пример:

// PHP программа для сравнения дат

// Объявляем две даты в разных
// форматировать

// Используем функцию strtotime () для конвертации
// дата в dateTimestamp

// Сравнить дату отметки

Метод 3: Использование класса DateTime для сравнения двух дат.

Пример:

// PHP программа для сравнения дат

// Объявляем две даты в разных
// форматировать и использовать функцию DateTime ()
// конвертировать дату в DateTime

$date1 = new DateTime( «12-11-24» );

$date2 = new DateTime( «2011-03-26» );

Источник

Сравнение двух дат

Как сравнить две даты в PHP?

В базе данных дата выглядит как 2011-10-2.

Если бы я хотел сравнить сегодняшнюю дату с датой в базе данных, чтобы узнать, какая из них больше, как мне это сделать?

но на самом деле это не так. Какой еще способ сделать это?

Обновление: я знаю, что это сообщение было довольно старым, но я просто хотел упомянуть углерод, который является классом, который используется с laravel, но может использоваться с классическим php, и он делает чудеса с датами. проверьте это: Углерод

в базе данных дата выглядит так: 2011-10-2

Сохраните его в ГГГГ-ММ-ДД, и тогда сравнение строк будет работать, потому что «1»> «0» и т. Д.

Если все ваши даты выходят с 1 января 1970 года, вы можете использовать что-то вроде:

Если вы используете PHP 5> = 5.2.0, вы можете использовать класс DateTime:

Или что-то в этом роде.

Чтобы комплимент уже предоставленных ответов, см. Следующий пример:

Обновление: или просто использовать функцию date () старой школы:

Я бы не сделал этого с PHP. База данных должна знать, какой день сегодня (используйте MySQL-> NOW (), например), поэтому будет очень легко сравнивать в запросе и возвращать результат без каких-либо проблем в зависимости от используемых типов даты

Это может помочь, если вы планируете использовать DateTimes.

Вы можете использовать простой PHP для сравнения дат:

Это даст вам правду или ложь.

У меня тоже была эта проблема, и я решаю ее:

Нашел ответ на блог VipDomaine, и он прост как:

И вы получите дни между двумя датами.

но обе даты должны быть в одном формате

Вот как можно получить разницу между двумя датами в минутах.

Источник

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

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