如何比较PHP中的两个日期?
在数据库中,日期看起来像2011-10-2。
如果我想将今天的日期与数据库中的日期进行比较以查看哪一个更大,我该怎么做?
我试过了,
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
但它并没有真正起作用。这样做的另一种方式是什么?
更新:我知道这篇文章有点陈旧但我只是想提一下碳,这是一个与laravel一起使用的类,但可以与经典的PHP一起使用,它确实有日期的奇迹。检查出来:Carbon
答案 0 :(得分:204)
如果您的所有日期都在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 */ }
如果您使用的是PHP 5&gt; = 5.2.0,则可以使用DateTime类:
$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);
if ($expire_dt < $today_dt) { /* Do something */ }
或者沿着这些方向发展。
答案 1 :(得分:74)
数据库中的日期如下所示:2011-10-2
将其存储在YYYY-MM-DD中,然后字符串比较将起作用,因为'1'&gt; '0'等等。
答案 2 :(得分:19)
只是为了赞美已经给出的答案,请参阅以下示例:
$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database
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!
}
答案 3 :(得分:6)
我不会用PHP做这件事。 数据库应该知道今天是哪一天。(例如使用MySQL-&gt; NOW()),因此在Query中进行比较并返回结果非常容易,具体取决于使用的Date-Types < / p>
SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
答案 4 :(得分:4)
int ReadEncoderSpeedRpmLeft (void);
int ReadEncoderSpeedRpmRight (void);
答案 5 :(得分: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";
}
答案 6 :(得分:2)
以下是如何在几分钟内获得两个日期之间差异的方法。
// 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;
答案 7 :(得分:1)
您可以使用简单的PHP来比较日期:
$date = new simpleDate();
echo $date->now()->compare($expire_date)->isBeforeOrEqual();
这会给你真假。
您可以查看教程以获取更多示例。请click here。
答案 8 :(得分:1)
我也遇到了这个问题,我通过以下方式解决了这个问题:
$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db
if(($today - $expire) > $NUMBER_OF_DAYS)
{
//do something;
}
答案 9 :(得分:0)
在博客上找到了答案,它很简单:
strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400
你将获得两个日期之间的日子。
答案 10 :(得分:0)
只需查看..
if ($startdate < $date) {// do something}
if ($startdate > $date) {// do something}
但两个日期必须采用相同的格式
Y-m-d或d-m-Y
等
答案 11 :(得分:0)
首先,尝试将您想要的格式提供给服务器的当前日期时间:
获取当前日期时间
$ current_date = getdate();
根据需要单独管理日期和时间:
$ current_date_only = $ current_date [year]。&#39; - &#39;。$ current_date [mon]。&#39; - &#39;。$ current_date [mday]; $ current_time_only = $ current_date [&#39;小时&#39;]。&#39;:&#39;。$ current_date [&#39;分钟&#39;]。&#39;:&#39;。$ CURRENT_DATE [&#39;秒&#39;];
根据您在数据库中使用donly date或datetime进行比较:
$ today = $ current_date_only。&#39; &#39; $ current_time_only;
或
$ today = $ current_date_only;
if($ today&lt; $ expireDate)
希望有所帮助
答案 12 :(得分:0)
这是我如何使用PHP获得两个日期之间的天数差异的话题。 注意使用“!”格式要舍弃日期的时间部分,这要感谢DateTime createFromFormat without time的信息。
$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";
答案 13 :(得分:0)
如果您希望某个日期($ 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 */ }