Как я могу сравнить две даты в PHP?
Дата хранится в базе данных в следующем формате
2011-10-2
Если бы я хотел сравнить сегодняшнюю дату с датой в базе данных, чтобы увидеть, какая из них больше, как бы я это сделал?
Я пробовал это,
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
но на самом деле это не так. Как еще это сделать?
Ответы:
Сохраните его в формате ГГГГ-ММ-ДД, и тогда сравнение строк будет работать, потому что '1'> '0' и т. Д.
источник
2016-03-27 11:59:47 ::: 2016-03-14 10:30:00
?Если все ваши даты предшествуют 1 января 1970 года, вы можете использовать что-то вроде:
Если вы используете PHP 5> = 5.2.0, вы можете использовать класс DateTime:
Или что-то в этом роде.
источник
1st of January of 1970
относится только к старым версиям PHP, работающим в Windows, и никогда не было проблемой в Unix.strtotime
вернет false для больших дат. stackoverflow.com/questions/2012589/…DateTime
метод является предпочтительным. Этот объект может сделать гораздо больше, чемstrtotime
когда-либо.new DateTime('now')
также работает, чтобы получить сегодняшнюю датуЧтобы дополнить уже полученные ответы, см. Следующий пример:
Обновление: Или просто используйте функцию старой школы date () :
источник
Я бы не стал этого делать с PHP. База данных должна знать, какой сегодня день (например, используйте MySQL-> NOW ()), поэтому будет очень легко сравнить в запросе и вернуть результат без каких-либо проблем в зависимости от используемых типов дат.
источник
источник
Вот способ, как получить разницу между двумя датами за считанные минуты.
источник
Вы можете преобразовать даты в отметки времени UNIX и сравнить разницу между ними в секундах.
источник
У меня тоже была эта проблема, и я решаю ее:
источник
Вот мой рассказ о том, как с помощью PHP получить разницу в днях между двумя датами. Обратите внимание на использование символа '!' в формате, чтобы отбросить временную часть дат, благодаря информации из DateTime createFromFormat без времени .
источник
Нашел ответ в блоге, и это очень просто:
И вы получите дни между двумя датами.
источник
Это работает из-за логики сравнения строк PHP. Просто можете проверить ...
Обе даты должны быть в одном формате. Цифры необходимо дополнить нулями слева и отсортировать от наиболее значимого к наименее значимому.
Y-m-d
иY-m-d H:i:s
удовлетворяют этим условиям.источник
d-m-Y
не будет работать ..Y-m-d
(с нулем в начале, например, 08.05.2016) будет работать. Проверьте эти даты вd-m-Y
формате01-10-2016
и20-02-2016
, сравнив их как строки 0 <2, сравнение прекратится, но будет некорректно ...2011-10-2
.Если вы хотите, чтобы дата ($ date) истекла через некоторый интервал, например, дату истечения срока действия токена при выполнении сброса пароля, вот как вы можете сделать:
Но в вашем случае вы можете провести сравнение следующим образом:
источник
requestDate()
метод - о нем нигде не упоминается. Я бы не стал использовать ваш ответ и не рекомендовал бы исследователям использовать ваше решение. Я не предвижу, что изменю свой голос.Прежде всего, попробуйте задать формат текущей даты вашего сервера:
Получить текущую дату и время
$ current_date = getdate ();
Разделяйте дату и время, чтобы управлять ими по своему усмотрению:
$ current_date_only = $ current_date [год].'- '. $ current_date [mon] .'-'. $ current_date [день]; $ current_time_only = $ current_date ['часы']. ':'. $ current_date ['минуты']. ':'. $ current_date ['секунды'];
Сравните это в зависимости от того, используете ли вы дату или дату и время в своей БД:
$ сегодня = $ current_date_only. ' »$ Current_time_only.
или
$ сегодня = $ current_date_only;
если ($ сегодня <$ expireDate)
Надеюсь, поможет
источник