我有一个任务模块,其中有两个字段
示例数据:
id task_name t_due_on t_completed_on
1 PF Module 2017-03-14 10:15 PM 2017-03-13 23:29 PM
给定任务的截止日期是明天,但实际上今天已经完成,所以我需要显示如下结果:
Task finished: 1 day before
答案 0 :(得分:0)
您可以使用DateTime::diff()
or DateTimeImmutable::diff()
function。您所要做的就是比较两个日期。我在这里给出了一个非常基本的例子:
$dt1 = new DateTimeImmutable('2017-03-14 00:00:00');
$dt2 = new DateTimeImmutable('2017-03-16 12:00:00');
$di = $dt2->diff($dt1);
$outputStr = "Task finished: {$di->days} days ";
$suffix = $di->invert == 1 ? 'before' : 'after';
$outputStr .= $suffix . " deadline";
echo $outputStr;
现在重要的是要注意:
diff()
函数将生成DateInterval class instance。这不提供方法,而是以秒,分钟,小时,天,周等方式解释时间间隔。$di->invert
时,请注意-2 days
为高(== 1)。 $di->invert
对于正差异将为0 $dt2->diff($dt1)
与$dt1->diff($dt2)
不同,因为日期的时间间隔如何$di->days
将为0!但是$di->h
将被设置。因此,您的功能还必须智能地处理此问题