2017-03-13 28 views
0

我有一个任务模块,在这我有两个领域如何格式化DateInterval结果

  • 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 
+0

看看类似的问题,这只是适应你的需要 - http://stackoverflow.com/questions/365191/how-to-get-time-difference -in - 分 - 在-PHP – Peter

回答

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。这不提供方法,而是解释以秒,分,小时,天,星期等形式的时间间隔。
  • 注意,当间隔为-2 days时,$di->invert为高(== 1)。 $di->invert将为0为正差异
  • 比较的顺序很重要!因此,拨打$dt2->diff($dt1)$dt1->diff($dt2)不一样,因为日期的间隔时间如何。
  • 您必须处理输出。即如果两个日期之间的差异小于一天$di->days将为0!但是$di->h将被设置。因此,你的功能必须智能地处理这也