2017-03-13 37 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將被設置。因此,你的功能必須智能地處理這也