比较两个日期

Sar*_* B. 119 php compare date

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

在数据库中,日期看起来像2011-10-2.

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

我试过这个,

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

if($today < $expireDate) { //do something; }
Run Code Online (Sandbox Code Playgroud)

但它并没有真正起作用.这样做的另一种方式是什么?

更新:我知道这篇文章有点旧,但我只是想提一下碳,这是一个与laravel一起使用的类,但可以与经典的PHP一起使用,它确实有日期的奇迹.看看吧:

Hug*_*oto 212

如果您的所有日期都在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 */ }
Run Code Online (Sandbox Code Playgroud)

如果您使用的是PHP 5> = 5.2.0,则可以使用DateTime类:

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

if ($expire_dt < $today_dt) { /* Do something */ }
Run Code Online (Sandbox Code Playgroud)

或者沿着这些方向的东西.

  • 这是一个更好的答案. (22认同)
  • 现在不是“如果您的所有日期都晚于 1970 年 1 月 1 日”和“早于 2038 年”吗?关注我们的 y2k38 错误。`strtotime` 将在较大的日期返回 false。/sf/ask/140881261/ (2认同)
  • `new DateTime('now')` 也可以检索今天的日期 (2认同)

Mat*_*hew 75

在数据库中,日期看起来像2011-10-2

将其存储在YYYY-MM-DD中,然后字符串比较将起作用,因为'1'>'0'等.

  • @Davo,比较在第一个不同的角色停止.在这种情况下,第四个数字'1'<'2',所以你得到你期望的结果. (14认同)
  • 但如果他们看起来像这样,2011-10-02和2012-02-10,月份比较1> 0,但2011-10-02 <2012-02-10 (2认同)

d.r*_*aev 21

只是为了赞美已经给出的答案,请参阅以下示例:

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



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

更新: 或简单使用old-school date()函数:

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

  • @spdionis感谢您的评论,我更改了大写字母以消除可能的混淆. (2认同)

Dr.*_*lle 6

我不会用PHP做这件事.数据库应该知道今天是哪一天.(例如使用MySQL-> NOW()),因此在Query中进行比较并返回结果非常容易,取决于使用的Date-Types,没有任何问题

SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
Run Code Online (Sandbox Code Playgroud)

  • 但是你将expireDate存储在db中.将此日期与NOW()进行比较 (3认同)

Ati*_*ood 5

$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.";
}
Run Code Online (Sandbox Code Playgroud)