如何在 PHP 中比较两个日期?

如何在 PHP 中比较两个日期?

日期以下列格式存储在数据库中

2011-10-2

如果我想将今天的日期与数据库中的日期进行比较,看看哪一个更大,我该如何做呢?

我试过了,

$today = date("Y-m-d");
$expire = $row->expireDate //from db


if($today < $expireDate) { //do something; }

但事实并非如此,还有别的方法吗?

306346 次浏览

如果你所有的日期都在1970年1月1日之后,你可以使用这样的东西:

$today = date("Y-m-d");
$expire = $row->expireDate; //from database


$today_time = strtotime($today);
$expire_time = strtotime($expire);


if ($expire_time < $today_time) { /* do Something */ }

如果使用的是 PHP5 > = 5.2.0,可以使用 DateTime 类:

$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);


if ($expire_dt < $today_dt) { /* Do something */ }

或者类似的东西。

数据库里的日期是2011-10-2

将它存储在 YYYY-MM-DD 中,然后字符串比较将工作,因为’1’>’0’,等等。

我不会这样做与 PHP。 数据库应该知道今天是什么日子。(例如使用 MySQL-> NOW ()) ,这样就很容易在查询中进行比较并返回结果,而且根据使用的日期类型没有任何问题

SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName

只是为了赞美已经给出的答案,请看下面的例子:

$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database






if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) {
//do something;
}

更新: 或简单使用老式 日期()函数:

if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
//echo not yet expired!
}

我也有这个问题,我解决它的方法是:

$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db


if(($today - $expire) > $NUMBER_OF_DAYS)
{
//do something;
}

您可以将日期转换为 UNIX 时间戳,并以秒为单位比较它们之间的差异。

$today_date=date("Y-m-d");
$entered_date=$_POST['date'];
$dateTimestamp1 = strtotime($today_date);
$dateTimestamp2 = strtotime($entered_date);
$diff= $dateTimestamp1-$dateTimestamp2;
//echo $diff;
if ($diff<=0)
{
echo "Enter a valid date";
}

在一个博客上找到了答案,答案很简单:

strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400

你会得到两次约会之间的时间。

$today = date('Y-m-d');//Y-m-d H:i:s
$expireDate = new DateTime($row->expireDate);// From db
$date1=date_create($today);
$date2=date_create($expireDate->format('Y-m-d'));
$diff=date_diff($date1,$date2);


//echo $timeDiff;
if($diff->days >= 30){
echo "Expired.";
}else{
echo "Not expired.";
}

这是因为 PHP 的字符串比较逻辑。

if ($startdate < $date) {// do something}
if ($startdate > $date) {// do something}

两个日期必须采用相同的格式。数字需要从左边零填充,并从最重要到最不重要进行排序。Y-m-dY-m-d H:i:s满足这些条件。

这里有一个方法,如何在几分钟内得到 两次约会的区别

// set dates
$date_compare1= date("d-m-Y h:i:s a", strtotime($date1));
// date now
$date_compare2= date("d-m-Y h:i:s a", strtotime($date2));


// calculate the difference
$difference = strtotime($date_compare1) - strtotime($date_compare2);
$difference_in_minutes = $difference / 60;


echo $difference_in_minutes;

首先,尝试为服务器的当前日期时间提供所需的格式:

  1. 获取当前日期时间

    $current _ date = getdate () ;

  2. 分开日期和时间,按照你的意愿管理它们:

$current _ date _ only = $current _ date [ year ] .’-’. $current _ date [ mon ] .’-’. $current _ date [ mday ] ; $current _ time _ only = $current _ date [‘ hours’] .’:’. $current _ date [‘ minutes’] .’:’. $current _ date [‘ second’] ;

  1. 比较它取决于你是否使用 donly 日期或日期时间在你的数据库:

    $today = $current _ date _ only.’. $current _ time _ only;

    或者

    $today = $current _ date _ only;

    如果($today < $expireDate)

希望能有所帮助

下面是我对如何使用 PHP 获得两个日期之间的天数差异的看法。 注意“ !”的用法在格式丢弃的日期的时间部分,由于信息从 没有时间的 DateTime createFromFormat

$today = DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
$wanted = DateTime::createFromFormat('!d-m-Y', $row["WANTED_DELIVERY_DATE"]);
$diff = $today->diff($wanted);
$days = $diff->days;
if (($diff->invert) != 0) $days = -1 * $days;
$overdue = (($days < 0) ? true : false);
print "<!-- (".(($days > 0) ? '+' : '').($days).") -->\n";

如果您希望某个日期($date)在某个时间间隔内过期,例如在执行密码重置时出现令牌过期日期,您可以这样做:

$date = $row->expireDate;


$date->add(new DateInterval('PT24H')); // adds 24 hours


$now = new \DateTime();


if($now < $date) { /* expired after 24 hours */ }

但是在你的情况下,你可以做如下的比较:

$today = new DateTime('Y-m-d');


$date = $row->expireDate;


if($today < $date) { /* do something */ }