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

标签 php date time strtotime

我想检查日期是今天、明天、昨天还是其他。 但是我的代码不起作用。

代码:

$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

}

代码总是在 else 的情况下。

最佳答案

首先。你在使用strtotime函数时出错,见PHP documentation

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

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

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

第三个。我不确定它是否对你有用,但我的 PHP 不理解 $timestamp 中的日期格式并返回 01.01.1970 02:00 进入 $match_date

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

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

这是一个工作示例:

$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";
}

关于PHP:如何检查日期是今天、昨天还是明天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622370/

相关文章:

php - CSS 如何链接到 <head>

php - DISTINCT 关键字在我的查询中不起作用

Javascript New Date() 返回无效日期

mysql - 如何在 36 秒内查找并分组时间链?

ios - 选择特定月份和年份的数据 sqlite xcode

javascript - 我在这里有多少时间?

php - 如何通过 PHP 将 javascript 生成的数据从客户端发送到服务器

php - 如果不使用唯一记录不存在,则插入到 mysql 表中

sql - 使用夏令时计算时间戳

java - 如果数组的格式是字符串,如何对数组中的分钟求和?