2010-10-02 238 views
92

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

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

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

我想这一点,

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

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

,但它并没有真正工作的方式。另一种做法是什么?

更新:我知道这篇文章有点老了,但我只是想提到碳,这是一个与laravel一起使用的类,但可以与经典的php一起使用,它可以与日期一起使用。检查出来:如果你正在使用PHP 5> = 5.2.0

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

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

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

,你可以:Carbon

+0

将db日期分配给DateTime对象,然后比较这些对象。您可以在http://stackoverflow.com/questions/961074/how-do-i-compare-two-datetime-objects-in-php-5-2-8 – Peter 2014-10-17 10:48:16

+0

选择的答案一个很好的例子,这个问题(绿色复选框)适用于某些应用程序; @Hugo Peixoto的答案当然是这个问题的总体最佳答案。 – Aaron 2015-08-06 04:46:30

回答

63
的日期看起来像这样的数据库

2011-10-2

储存于YYYY-MM-DD,然后字符串比较会工作,因为 '1'> '0',等等。

+2

但如果他们这个样子,2011-10-02 2012-02-10并为一个月比较1> 0,但是2011-10-02 <2012-02-10 – dav 2013-02-22 23:26:45

+12

@Davo,比较停在第一性格不同。在这种情况下,'1'的第四个数字<'2',所以你可以得到你期望的结果。 – Matthew 2013-02-23 02:25:49

+1

对不起:),不够小心。 – dav 2013-02-23 07:51:49

164

如果你所有的日期晚于1970年1月1日,你可以使用类似使用DateTime类:

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

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

或沿着这些线。

+16

这是一个更好的答案。 – ChristoKiwi 2014-11-19 02:43:59

+0

如果我没有记错,对'1970年1月1日'的关注只适用于在** Windows **上运行的旧版本的PHP,并且它在Unix上从来都不是问题。 – 2016-01-25 12:49:18

+0

我喜欢这个答案。这是一个很好的选择,将日期转换为strtotime() – 2017-01-25 04:30:20

1

This可能会有所帮助,如果你正在考虑使用日期时间。

+0

他不使用DateTime是否。片段显示“日期”功能。 – zneak 2010-10-02 22:27:30

+0

我明白了,但肯定可以将日期转换为日期时间?我不是一个PHP开发人员。 – 2010-10-02 22:39:33

6

我不会这样做与PHP。 数据库应该知道今天是星期几(例如使用MySQL-> NOW()),因此在查询内比较非常容易,并且返回结果,而不会有任何问题,具体取决于使用的日期类型

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

谢谢,但我实际上使用日期()我不存储今天的日期在分贝 – 2010-10-03 05:26:30

+2

但你存储expireDate在分贝。现在比较这个日期与() – 2010-10-03 07:53:39

+0

更新我的答案用一个例子 – 2010-10-03 08:00:54

17

只是恭维已经给出答案,请看下面的例子:

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



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

更新: 或者简单的用老派date()功能:

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

日期是一个函数,不是类/构造函数。 – spdionis 2015-04-06 12:01:57

+0

@spdionis感谢您的评论,我改变了大写字母以消除可能的混淆。 – 2016-01-25 12:46:17

1

您可以使用简单的PHP比较日期:

$date = new simpleDate(); 
echo $date->now()->compare($expire_date)->isBeforeOrEqual(); 

这会给你真的还是假的。

您可以查看教程以获取更多示例。请click here

1

我有这样的问题太多,我通过解决它:

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

if(($today - $expire) > $NUMBER_OF_DAYS) 
{ 
    //do something; 
} 
2
$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"; 
    } 
0

上找到VipDomaine博客的答案,它是那样简单:

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

,你会得到的两天之间的日子。

2
$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); 
$timeDiff = $diff->format("%R%a days"); 

echo $timeDiff; 
if($timeDiff < 0){ 
    echo "Expired."; 
}else{ 
    echo "Not expired."; 
} 
0

只要你可以检查..

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

但是这两个日期必须在同一formatlike

Y-M-d或d-M-Y

+1

'd-m-Y'将不起作用。'Y-m-d'(带有像2016-05-08这样的前导零)将会起作用。检查'dmY'格式'这些日期01-10-2016'和'20-02-2016',比较作为字符串0 <2,它会停止,但比较正确... – Arxeiss 2016-11-19 15:57:50

0
while ($row=mysql_fetch_array($result)) 
    { 


     $orderdate=explode('-',$row['alertdate']); 
     $date=$orderdate[0]; 
     $month=$orderdate[1]; 
     $year=$orderdate[2]; 

     if((date(Y)>=$year) and (date(m)>=$month) and (date(d)>=$date)) 
     { 
      //write your true code 

     } 
     else 
     { 
      //write your false code 
     } 
+0

你能解释代码一点点PLS – GGO 2017-10-27 12:20:30

1

下面是关于如何让两个日期以分钟为单位之间的差异的方式。

// 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; 
+0

问题是要求比较两个日期 - 您的答案是添加一些额外的东西(即设置在线/离线状态),这是不必要的作为问题的答案。比较发生的部分答案与现有答案几乎相同[https://stackoverflow.com/a/3847762/1561469]。 – crazyloonybin 2017-12-06 12:59:17

+0

更新了这个问题,我在错误的问题中发布了错误的答案^^;)它与答案不一样,只是添加我的输入以便比较它们并在几分钟内获得差异。 – Syno 2017-12-06 14:02:23

+1

因为您的更新,我删除了我的downvote,现在看起来好多了:) – crazyloonybin 2017-12-06 14:05:30