Відповіді:
strtotime($var);
Перетворює це у значення часу
time() - strtotime($var);
З того часу дає вам секунди $var
if((time()-(60*60*24)) < strtotime($var))
Перевіримо, чи $var
було протягом останнього дня.
Цей формат цілком підходить для стандартного порівняння рядків, наприклад
if ($date1 > $date2){
//Action
}
Щоб отримати поточну дату в цьому форматі, просто використовуйте: date("Y-m-d H:i:s")
.
Так:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
У цьому краса цього формату: він замовляє чудово. Звичайно, це може бути менш ефективним, залежно від ваших точних обставин, але це може бути і набагато зручнішим і призведе до більш доступного коду - нам знадобиться знати більше, щоб справді зробити цей судовий виклик.
Для правильного часового поясу можна використовувати, наприклад,
date_default_timezone_set('America/New_York');
Натисніть тут, щоб посилатися на доступні часові зони PHP.
mm/dd/yyyy
формат до дати та порівняти їх. Мене завжди хвилює, коли розробники мають дату в декількох часових поясах у своїй системі. Я думаю, що краще зберігати дати у своїй системі завжди в одному часовому поясі, а потім відображати їх у будь-який часовий пояс. Я почав використовувати yyyy-mm-dd
формат (або yyyymmdd
) близько 1998 року, коли зрозумів, що він сортує набагато швидше навіть на SQL сервері.
Ось вам:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
Також деякі додаткові функції:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
і це зробив для мене.
Щоб завершити BoBby Jack, використовуйте Object DateTime, якщо у вас є php 5.2.2+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Ви можете використовувати DateTime
клас:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
Оператори порівняння працюють *:
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
Можна також схопити значення часових позначок з об'єктів DateTime і порівняти їх:
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* Зверніть увагу, що ===
повертає помилку при порівнянні двох різних об'єктів DateTime, навіть коли вони представляють одну і ту ж дату.
$future
стала минулим. : P
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
$var
дорівнює в ОП
Обережно, грунтуючись на моєму досвіді, якщо ваша мета передбачає лише дату, то будьте обережні, щоб включити позначку часу . Наприклад, сказати сьогодні є "2016-11-09"
. Порівняння, пов’язане з часовою міткою, зведе нанівець логіку. Приклад,
// input
$var = "2016-11-09 00:00:00.0";
// check if date is today or in the future
if ( time() <= strtotime($var) )
{
// This seems right, but if it's ONLY date you are after
// then the code might treat $var as past depending on
// the time.
}
Код вище здається правильним, але якщо це ТІЛЬКА дата, яку ви хочете порівняти, то наведений вище код не є правильною логікою. Чому? Тому що, time () та strtotime () будуть надавати, включають часові позначки. Тобто, хоча обидві дати припадають на один і той же день, але різниця у часі матиме значення. Розглянемо приклад нижче:
// plain date string
$input = "2016-11-09";
Оскільки вхід є простим рядком дати, використовуючи strtotime()
on, $input
буде припускати, що це півночі 2016-11-09. Тож біг у time()
будь-який час після півночі завжди буде лікувати$input
минулим, навіть якщо вони в один і той же день.
Щоб виправити це, ви можете просто кодувати, як це:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
Через кілька років я повторюю зауваження Боббі Джека, що останні 24 години - це не сьогодні !!! І я здивований, що відповідь так сильно схвалив ...
Для порівняння, якщо певна дата менша, рівна чи більша за іншу, спочатку потрібно повернути їх «вниз» до початку дня. Іншими словами, переконайтеся, що ви говорили про один і той же час 00:00:00 в обидві дати. Це можна зробити просто та елегантно, як:
strtotime("today") <=> strtotime($var)
якщо $var
є час часу на 00:00:00, як зазначено в ОП.
Замініть <=>
на все, що вам потрібно (або збережіть так у php 7)
Крім того, очевидно, ми говоримо про однаковий часовий пояс для обох. Для списку підтримуваних TimeZones
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(Приклад w3schools, він працює ідеально)
Розширення відповіді Джосуа від w3schools:
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);
//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);
//now compare the two dates
if ($intDiff > 0) {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}
Я сподіваюся, що це допомагає. Моє перше повідомлення про stackoverflow!
Порівняйте об'єкти часу:
(Я вибрав 10 днів. Все, що старше 10 днів, - "СТАРИЙ", ще "НОВЕ")
$now = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
echo "OLD! " . $yourdate->format('m/d/Y');
}else{
echo "NEW! " . $yourdate->format('m/d/Y');
}
Деякі відповіді не враховують поточний день!
Ось моя пропозиція.
$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);
if ($given_date == new \DateTime('today')) {
//today
}
if ($given_date < new \DateTime('today')) {
//past
}
if ($given_date > new \DateTime('today')) {
//future
}
Якщо ви робите речі з часом і датами Carbon - ваш найкращий друг;
Потім встановіть пакет:
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt = менше, gt = більше, ніж
Як і в питанні:
$theDay->gt(Carbon::today()) ? true : false;
і набагато більше;