PHP:如何检查日期是今天,昨天还是明天

2022-08-30 09:44:50

我想检查一下,如果日期是今天,明天,昨天还是其他。但是我的代码不起作用。

法典:

$timestamp = "2014.09.02T13:34";
$date = date("d.m.Y H:i");
$match_date = date('d.m.Y 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

}

代码总是在其他情况下进行。


答案 1

第一。您在使用函数时有错误,请参阅PHP文档strtotime

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

您需要修改代码以将整数时间戳传递到此函数中。

第二。您使用包含时间部分的格式 d.m.Y H:i。如果您只想比较日期,则必须删除时间部分,例如'$date = date(“d.m.Y”);''

第三。我不确定它是否以相同的方式为您工作,但我的PHP不理解日期格式,并将01.01.1970 02:00返回$timestamp$match_date

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

您需要检查是否返回正确的日期字符串。如果不是,则需要指定变量中使用的格式。您可以使用date_parse_from_formatDateTime::createFromFormat 中的函数之一来执行此操作。strtotime($timestamp)$timestamp

这是一个工作示例:

$timestamp = "2014.09.02T13:34";

$today = new DateTime("today"); // This object represents current date/time with time set to midnight

$match_date = DateTime::createFromFormat( "Y.m.d\\TH:i", $timestamp );
$match_date->setTime( 0, 0, 0 ); // set time part to midnight, in order 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";
}

答案 2
<?php 
 $current = strtotime(date("Y-m-d"));
 $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 'tomorrow';
 }
 else if($difference < -1)
 {
    echo 'Long Back';
 }
 else
 {
    echo 'yesterday';
 }  
?>

推荐