【问题标题】:Get the days between two dates in PHP [duplicate]在PHP中获取两个日期之间的天数[重复]
【发布时间】:2013-11-14 17:32:08
【问题描述】:

我有一个带有$startDate(即Nov 12, 2013)和$endDate(即January 31, 2014)的ajax 数据对象,我想创建一个如下所示的数组:

array(2013-11-12, 2013-11-13, 2013-11-14, ... , 2014-01-31);

我尝试这样做的方式是:

    while($startDate < $endDate){
       $day = gmdate('Y-m-d', strtotime('+1 day', strtoTime($data->data['startDate'])));
       $daysOfTheWeek[] = $day;
    }

但脚本在 30 秒后超时。所以我想知道这样做的正确方法是什么。

【问题讨论】:

  • set_time_limit(0); 但是哦,那是一个无限循环。不要让你的服务器崩溃
  • 查看DateInterval类:us1.php.net/dateinterval
  • 您永远不会更改 startdate,那么您为什么希望它永远不会小于 enddate?永久循环
  • 如果您使用 php 5.3 查找 datetime 对象,则有一个 diff 方法返回一个 datetimeinterval 对象,您可以使用 format 方法进行格式化。

标签: php arrays date days


【解决方案1】:
<?php
  $dates=array();
  $start=strtotime("Nov 12, 2013");
  $end=strtotime("January 31, 2014");
  while($start <= $end)
  {
    $dates[]=date("Y-m-d",$start);
    $start=strtotime("+1 day",$start);
  }
  print_r($dates);
?>

Fiddle

【讨论】:

    【解决方案2】:
    date_default_timezone_set('UTC');
    $date_from = 'Nov 12, 2013';
    $date_to = 'January 31, 2014';
    $date_range = array_map(function ($date) {
            return $date->format('Y-m-d');
        }, iterator_to_array(
            new DatePeriod(new DateTime($date_from),
                           DateInterval::createFromDateString('+1 day'),
                           (new DateTime($date_to))->modify('+1 day'))));
    var_dump($date_range);
    

    演示:https://eval.in/68133

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多