如何格式化DateInterval结果

时间:2017-03-13 18:29:25

标签: php php-5.5

我有一个任务模块,其中有两个字段

  • t_due_on(任务完成日期)
  • t_completed_on(任务完成日期)

示例数据:

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

1 个答案:

答案 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将被设置。因此,您的功能还必须智能地处理此问题