繁体   English   中英

比较PHP中的MySQL日期

[英]Comparing mysql dates in php

我正在为朋友创建一个处理截止日期的应用程序。 我设置了一个页面,每个用户都可以看到自己的“工作要做”,并且旁边有一个截止日期。 我的问题是

如何比较从mysql查询返回的截止日期为2010.08.08和今天的日期?

例如...

 <?php
while($row = mysql_fetch_array($result)){

$jobfinishdate = $row['jobfinishdate'];
$date = date('Y-m-d');

if ($jobfinishdate>$date)
 $jobfinishdate .= " - Not due yet!" ;
 else if ($jobfinishdate<$date)
  $jobfinishdate .= " - You didn't meet this deadline!";
  else if ($jobfinishdate==$date)
 $jobfinishdate .= " - Deadline is TODAY!";

}?>

这样就可以了。 但是,我真正想做的是显示一条消息,说“您有5天的截止日期。 任何想法如何解决这个问题?

谢谢。

巴蒂尔。

$days = (strtotime($jobfinishdate) - strtotime($date)) / (60 * 60 * 24);

应该让您在截止日期前剩下的天数。

编辑:上面的方法将始终返回以天为单位的差额-处理是否在到期日之前或之后(可能(如Adam所建议的那样仅使用time() )):

$date_passed = false;
$days = strtotime($jobfinishdate) - time();
if ($days < 0) { $date_passed = true; }
$days = $days / (60 * 60 * 24);

if (!$date_passed)
{
  echo "You have $days days left on this project.";
}
else
{
  echo "Deadline has expired $days days ago.";
}
// calculate days left
$daysleft = round( ( strtotime( $jobfinishdate ) - time() ) / 86400 );

// print out text for $daysleft
if( $daysleft == 0 )
   print( "Deadline is today!" );
else if ( $daysleft > 0 )
   printf( "You have %d days until deadline.", $daysleft );
else
   print( "You did not meet the deadline!" );

如果可能的话,我会让数据库返回天数,如下所示:

SELECT jobfinishdate, datediff(jobfinishdate, NOW() AS days) FROM table

然后使用以下天数:

while ($row = mysql_fetch_array($result)){
    $jobfinishdate = $row['jobfinishdate'];
    $days = $row['days'];   

    if ($days > 0) {
        $jobfinishdate .= " - Not due yet! $days until deadline" ;
    } elseif ($days < 0) {
        $jobfinishdate .= " - You didn't meet this deadline!";
    } else {
        $jobfinishdate .= " - Deadline is TODAY!";
}

}

其他说明:

  • 如果将日期计算保持在PHP中,请将$ date声明移到while循环之外,因为您只需执行一次即可。
  • 如果($ jobfinishdate == $ date),则可以删除最后一个条件。 如果日期不大也不小,则日期只能相等。

如果您使用的是PHP 5.3.0或更高版本,则可以使用DateTime对象

在SQL查询中:

SELECT
...,
TIMESTAMPDIFF(DAY, NOW(), `date_deadline`) AS days_to_deadline
...

这将在截止日期前产生正数天,而对于到期的任务将产生负数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM