【问题标题】:How to format DateInterval results如何格式化 DateInterval 结果
【发布时间】:2017-03-13 18:29:24
【问题描述】:

我有一个任务模块,里面有两个字段

  • 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

【问题讨论】:

标签: php php-5.5


【解决方案1】:

您可以使用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) 不同,因为日期的时间间隔是这样的
  • 您必须注意输出。 IE。如果两个日期之间的差小于一天,$di->days 将为 0!但$di->h 将被设置。因此,您的功能也必须智能地处理这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2020-08-08
    • 2021-12-25
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多