如何在PHP中比较两个日期?
日期以以下格式存储在数据库中
2011-10-2
如果我想将今天的日期与数据库中的日期进行比较,看哪个更大,我该怎么做?
我试过了
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
但这并不是真的那样。还有另一种方法吗?
如何在PHP中比较两个日期?
日期以以下格式存储在数据库中
2011-10-2
如果我想将今天的日期与数据库中的日期进行比较,看哪个更大,我该怎么做?
我试过了
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
但这并不是真的那样。还有另一种方法吗?
Answers:
在数据库中日期看起来像这样2011-10-2
将其存储在YYYY-MM-DD中,然后进行字符串比较,因为'1'>'0'等。
2016-03-27 11:59:47 ::: 2016-03-14 10:30:00
吗?
如果您所有的日期都在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> = 5.2.0,则可以使用DateTime类:
$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);
if ($expire_dt < $today_dt) { /* Do something */ }
或类似的东西。
1st of January of 1970
只适用于Windows上运行的旧版本的PHP,而在Unix上从来就不是问题。
strtotime
对于较大的日期将返回false。stackoverflow.com/questions/2012589/…–
DateTime
方法是首选方法。该对象可以做的比strtotime
以往任何时候都多。
new DateTime('now')
还可以检索今天的日期
只是为了补充已经给出的答案,请参见以下示例:
$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!
}
我不会用PHP做到这一点。数据库应该知道今天是星期几(例如,使用MySQL-> NOW()),因此在查询中进行比较并返回结果将非常容易,而不会因使用的日期类型而引起任何问题
SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
$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.";
}
这是关于如何在几分钟内获得两个日期之间差异的一种方法。
// 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;
我也有这个问题,可以通过以下方法解决:
$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db
if(($today - $expire) > $NUMBER_OF_DAYS)
{
//do something;
}
这是我如何使用PHP获得两个日期之间的天数差异的自旋。注意使用“!” 格式要舍弃日期的时间部分,这要归功于DateTime createFromFormat的信息,而没有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";
在博客上找到答案,方法很简单:
strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400
然后您将获得两个日期之间的日期。
由于PHP的字符串比较逻辑,因此可以工作。您只需检查一下...
if ($startdate < $date) {// do something}
if ($startdate > $date) {// do something}
两个日期必须使用相同的格式。数字需要在左边补零,并从最高有效位到最低有效位排序。Y-m-d
并Y-m-d H:i:s
满足这些条件。
d-m-Y
将无法正常工作.. Y-m-d
(前导零如2016-05-08)将正常工作。检查这些日期的d-m-Y
格式01-10-2016
和20-02-2016
,比较作为字符串0 <2,它会停止,但比较正确...
2011-10-2
。
如果您希望某个日期($ 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 */ }
requestDate()
方法会做什么-到处都没有提及它。我不会使用您的答案,也不会建议任何研究人员使用您的解决方案。我不希望自己改变我的投票。
首先,尝试将所需的格式赋予服务器的当前日期时间:
获取当前日期时间
$ current_date = getdate();
根据需要单独管理日期和时间:
$ current_date_only = $ current_date [year] .'-'。$ current_date [mon] .'-'。$ current_date [mday]; $ current_time_only = $ current_date ['hours']。':'。$ current_date ['minutes']。':'。$ current_date ['seconds'];
根据您在数据库中使用捐赠日期还是日期时间进行比较:
$ today = $ current_date_only。” '。$ current_time_only;
要么
$ today = $ current_date_only;
if($ today <$ expireDate)
希望能帮助到你