【问题标题】:PHP function to get days between start and end datesPHP函数获取开始日期和结束日期之间的天数
【发布时间】:2015-10-23 12:48:58
【问题描述】:

我有以下 PHP 函数应该返回两个日期之间的天数。 由于某些原因,一天总是重复。

$plusOneWeek = date("Y-m-d",strtotime("+1 week"));
$dates = getDates(date("Y-m-d"), $plusOneWeek);

function getDates($startTime, $endTime) {
    $day = 86400;
    $format = 'Y-m-d';
    $startTime = strtotime($startTime);
    $endTime = strtotime($endTime);
    //$numDays = round(($endTime - $startTime) / $day) + 1;
    $numDays = round(($endTime - $startTime) / $day); // remove increment

    $days = array();

    for ($i = 0; $i < $numDays; $i++) { //change $i to 1
        $addDay = date($format, ($startTime + ($i * $day)));
        $days[] = $addDay;
    }

    return $days;
}

结果是:

Array
(
    [0] => 2015-10-23
    [1] => 2015-10-24
    [2] => 2015-10-25
    [3] => 2015-10-25
    [4] => 2015-10-26
    [5] => 2015-10-27
    [6] => 2015-10-28
)

如您所见,此日期2015-10-25 出现了两次。我不明白为什么。

【问题讨论】:

  • 你为什么不使用 DateTime:diff() ?
  • 我刚刚运行了这段代码——我没有得到相同的结果。你确定?!
  • 我也运行了这段代码,结果很好。没有重复
  • 我得到了预期的结果。没有重复!
  • 伙计们,我没有得到确切的结果。它对我来说是重复的……这怎么可能?

标签: php date


【解决方案1】:

如果我运行你的代码,我不会得到重复,但无论如何我会完全避免使用 round() 方法(它也更短)。

function getDates($startTime, $endTime){
    $days = array();
    $currentDay = $startTime;
    do {
      $days[] = $currentDay;
      $currentDay = date('Y-m-d', strtotime($currentDay .' +1 day'));          
    } while ($currentDay < $endTime);
    return $days;
}

(随意添加一些错误处理,例如$endTime &lt; $startTime等)

【讨论】:

  • 您好,这个效果更好,但它是从明天开始而不是今天开始。怎么样?
  • 我刚刚读到,您想返回两个日期之间的天数 - 不确定这是否包括这一天。我更新了代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多