PHP: как проверить, установлена ​​ли дата сегодня, вчера или завтра

Я бы хотел проверить, есть ли дата сегодня, завтра, вчера или еще. Но мой код не работает.

Код:

$timestamp = "2014.09.02T13:34"; $date = date("dmY H:i"); $match_date = date('dmY H:i', strtotime($timestamp)); if($date == $match_date) { //Today } elseif(strtotime("-1 day", $date) == $match_date) { //Yesterday } elseif(strtotime("+1 day", $date) == $match_date) { //Tomorrow } else { //Sometime } 

Код всегда идет в другом случае.

Первый. У вас есть ошибка в использовании функции strtotime см. Документацию по PHP

 int strtotime ( string $time [, int $now = time() ] ) 

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

Во- вторых. Вы используете формат dmY H: i, который включает временную часть. Если вы хотите сравнить только даты, вы должны удалить временную часть, например `$ date = date (" dmY ");` `

В третьих. Я не уверен, что он работает одинаково для вас, но мой PHP не понимает формат даты из $timestamp и возвращает 01.01.1970 02:00 в $match_date

 $timestamp = "2014.09.02T13:34"; date('dmY H:i', strtotime($timestamp)) === "01.01.1970 02:00"; 

Вам нужно проверить, strtotime($timestamp) ли strtotime($timestamp) правильную строку даты. Если нет, вам нужно указать формат, который используется в переменной $timestamp . Вы можете сделать это, используя одну из функций date_parse_from_format или DateTime :: createFromFormat

Это пример работы:

 $timestamp = "2014.09.02T13:34"; $today = new DateTime(); // This object represents current date/time $today->setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison $match_date = DateTime::createFromFormat( "Ymd\\TH:i", $timestamp ); $match_date->setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison $diff = $today->diff( $match_date ); $diffDays = (integer)$diff->format( "%R%a" ); // Extract days count in interval switch( $diffDays ) { case 0: echo "//Today"; break; case -1: echo "//Yesterday"; break; case +1: echo "//Tomorrow"; break; default: echo "//Sometime"; } 
 <?php $current = strtotime(date("Ymd")); $date = strtotime("2014-09-05"); $datediff = $date - $current; $difference = floor($datediff/(60*60*24)); if($difference==0) { echo 'today'; } else if($difference > 1) { echo 'Future Date'; } else if($difference > 0) { echo 'tomarrow'; } else if($difference < -1) { echo 'Long Back'; } else { echo 'yesterday'; } ?> 

Я думаю, это поможет вам:

 <?php $date = new DateTime(); $match_date = new DateTime($timestamp); $interval = $date->diff($match_date); if($interval->days == 0) { //Today } elseif($interval->days == 1) { if($interval->invert == 0) { //Yesterday } else { //Tomorrow } } else { //Sometime } 

Нет встроенных функций для этого в Php (стыд ^^). Вы хотите сравнить строку даты с сегодняшним днем, вы можете использовать простой substr для ее достижения:

 if (substr($timestamp, 0, 10) === date('Ymd')) { today } elseif (substr($timestamp, 0, 10) === date('Ymd', strtotime('-1 day')) { yesterday } 

Нет преобразования даты, просто.

 function getRangeDateString($timestamp) { if ($timestamp) { $currentTime=strtotime('today'); // Reset time to 00:00:00 $timestamp=strtotime(date('Ymd 00:00:00',$timestamp)); $days=round(($timestamp-$currentTime)/86400); switch($days) { case '0'; return 'Today'; break; case '-1'; return 'Yesterday'; break; case '-2'; return 'Day before yesterday'; break; case '1'; return 'Tomorrow'; break; case '2'; return 'Day after tomorrow'; break; default: if ($days > 0) { return 'In '.$days.' days'; } else { return ($days*-1).' days ago'; } break; } } } 

Передайте дату в функцию.

  <?php function getTheDay($date) { $curr_date=strtotime(date("Ymd H:i:s")); $the_date=strtotime($date); $diff=floor(($curr_date-$the_date)/(60*60*24)); switch($diff) { case 0: return "Today"; break; case 1: return "Yesterday"; break; default: return $diff." Days ago"; } } ?>