Сравнение двух дат 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.17.40238

Нажимая «Принять все файлы 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» );

Источник

Строка: Сравнение дат

первое условие отрабатывает нормально,второе отробатывает только «меньше»,то есть этот код не пишет мне ОК,хотя должен

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сравнение дат
Привет всем, получаю дату в таком формате И суть в том что мне надо сравнить текущую дату и.

Сравнение дат
Здравствуйте, просмотрел многие справочники и не могу справиться с такой задачей: есть таблица в.

Имеет самое ключевое значение.
Формат даты у него подобран грамотно. Такой формат позволяет полноценно сравнивать даты как строки, без создания объектов или меток.

Согласитесь, это прозвучало как некая идеология.
Даты могут полноценно сравниваться и в строковом виде, но при грамотно сконструированном формате записи.

Если же говорить о личных предпочтениях, то я бы тоже создал метки и сравнивал по ним. Просто потому, что привык так делать.
Но еще раз подчеркну, это не значит, что нельзя выполнять сравнение другими способами.

Ну Вы же читали мое сообщение. Я писал именно о формате, который выбрал автор темы. Опирался я на первое сообщение темы. И проблем в сравнении лично я не заметил.

Вы же пишете о стандарте ISO-8601. И именно при использовании этого стандарта могут возникнуть проблемы.

Но главное: при использовании сравнения строк проблем в коде, описанном в данной теме, не возникнет.

Вы привели пример хорошего тона. И будет здорово, если автор темы изучит данный вопрос и будет использовать Ваш совет в будущем при работе с датами.
Я же отвечаю на вопрос в теме. И проблем при сравнении дат не возникнет. Код автора рабочий. Просто сам автор неверно его понимает. Оттого и вопросы возникают.

Я не вижу необходимости что-то обсуждать. Ибо мы только разводим оффтоп.

Источник

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

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