【问题标题】:PHP Datediff days involved涉及的 PHP Datediff 天数
【发布时间】:2014-05-31 13:31:54
【问题描述】:

我需要知道日期差异涉及多少天。 \例如:

<?

$start = new DateTime('2014-06-29 14:00:00');
$ende = new DateTime('2014-07-02 05:45:00');

$diff = $start->diff($ende);

echo $diff->format('%R');
echo $diff->days;
?>

以上代码回显+2

我想要的结果是 4,因为 7 月 29 日、30 日、1 日和 2 日被“触及”。 我不知道用给定的功能来实现这一点。编写减法代码似乎为错误打开了大门。

【问题讨论】:

    标签: php datetime datediff days


    【解决方案1】:

    在进行差异或使用 DatePeriods 时,PHP 似乎从不包括最后一天。在您的情况下,如果时间不是一个因素,只需删除每个日期的时间,然后在最后一个日期添加一天。那么最后一天将被忽略并获得准确的结果。

    <?php
    
    $start = new DateTime('2014-06-29');
    $ende = (new DateTime('2014-07-02'))->modify('+1 day');
    $diff = $start->diff($ende);
    
    echo $diff->format('%R');
    echo $diff->days;
    ?>
    

    Demo

    【讨论】:

    • 事实上时间是一个因素,因为时间是 UTC,但日期与当地时间相关,这意味着 $ende = "2014-07-02 23:00" 将是已经是当地时间的第 3 名。因此,取消时间标签不是一种选择。还有什么想法吗?
    【解决方案2】:

    如果你仔细想想,你就会得到正确的答案。

    开始时间是 2014-06-29 14:00:00

    1 天的差异是 2014-06-30 14:00:00

    2 天的差异是 2014-07-01 14:00:00

    3 天的差异是 2014-07-02 14:00:00

    4 天的差异是 2014-07-03 14:00:00

    您的结束日期是 2014-07-02 05:45:00,即 2 天 15 小时 45 分钟,因此仅显示天数差异,答案将是 2。

    答案绝不会是 4 天。

    编辑/更新:

    这给出了答案 4!

    <?php
        $start = strtotime('2014-06-29');
        $end = strtotime('2014-07-02');
    
        $diff = $end - $start;
    
        echo 'DAYS DIFF = ' . date('d', $diff) . PHP_EOL;
    

    但这并没有给出3,因为这当然是正确的答案。

    <?php
        $start = strtotime('2014-06-29 14:00:00');
        $end = strtotime('2014-07-02 05:45:00');
    
        $diff = $end - $start;
    
        echo 'DAYS DIFF = ' . date('d', $diff) . PHP_EOL;
    

    因此,如果您想要答案 4,看起来您将不得不删除数据/时间字段的时间部分。

    【讨论】:

    • 我并不是说差异是错误的。我只是说这不是我需要的答案。那么你知道我是如何回答我的问题的吗?
    【解决方案3】:

    试试这个:

    $start = new DateTime('2014-06-29 14:00:00');
    $ende = new DateTime('2014-07-02 05:45:00');
    $start->setTime(0, 0);
    $ende ->setTime(0, 0);
    $diff = date_diff($start, $ende);
    echo $diff->format('%R%a')+1;
    

    “+1”,因为天数之间的差减一。

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 2017-08-27
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多