【问题标题】:How to make a date limit in php?如何在php中设置日期限制?
【发布时间】:2011-07-29 05:50:45
【问题描述】:

如何限制此日期或打印从 star_date 到 end_date 的日期? 例如。

$start_date="2011-05-15";//june 15 2011

$end_date="2011-07-30";//july -7,2011

The result should be.

$dates[]="2011-05-15";
$dates[]="2011-05-16";
$dates[]="2011-05-17";
$dates[]="2011-05-18";
$dates[]="....";
$dates[]="....";
$dates[]="....";
$dates[]="....";
until it reaches.
$dates[]="2011-07-30";

【问题讨论】:

标签: php date


【解决方案1】:

我建议将开始日期作为一个对象,并在循环中不断添加 1 天 (http://www.php.net/manual/en/datetime.add.php) 直到到达结束日期。

<?php
$start_date = new DateTime('2011-05-15');
$end_date = new DateTime('2011-07-30');
while($end_date > $start_date)
{
   echo $start_date->format('Y-m-d') . "\n";
   $start_date->add(new DateInterval('P1D'));
}
?>

以上代码未经测试。

【讨论】:

    【解决方案2】:

    这可以做到……

    $start_date = strtotime('2011-05-15'); //june 15 2011
    $end_date = strtotime('2011-07-30'); //july -7,2011
    $dates = array();
    for ($i=$start_date; $i<=$end_date; $i+=86400) {
        $dates[] = date('Y-m-d',$i);
    }
    

    【讨论】:

      【解决方案3】:
      $start_date="2011-05-15";
      $end_date="2011-07-30";
      $date=$start_date;
      while (strtotime($new_date) != strtotime($end_date))
      {
         echo $new_date=date("Y-m-d",strtotime("+1 day", strtotime($date)))."<br>";
         $dates[]=$new_date;
         $date=$new_date;       
      }
      

      【讨论】:

        【解决方案4】:

        还有一个……

        date_default_timezone_set('America/Los_Angeles');
        
        $startDate='2011-05-15';
        $endDate='2011-07-30';
        
        $t1=strtotime($startDate);
        $days=(strtotime($endDate)-$t1)/86400;
        
        for($i=0;$i<=$days;$i++) $dates[]=date('Y-m-d',$t1+($i*86400));
        
        print_r($dates);
        

        对于“效率不高但在大多数情况下可以使用单线”:

        for($t=strtotime($startDate);$t<=strtotime($endDate);$t+=86400) $dates[]=date('Y-m-d',$t);
        

        对于那些知道的人来说,这是今天早上练习的最后一个:

        $dates=array_map(create_function('$t','return date("Y-m-d",$t);'),range(strtotime($startDate),strtotime($endDate),86400));
        

        【讨论】:

        • 是的,但是将洛杉矶设置为震中会自动增加一个小时的交通流量......(畏缩)
        • @neokio 对此感到抱歉,我无法确定您的时区,而洛杉矶是列表中的第一个...
        【解决方案5】:

        这行得通:

        $start_date = "2011-05-15";
        $end_date = "2011-07-07";
        
        $dates = array();
        $stop = strtotime($end_date);
        for($i = strtotime($start_date); $i <= $stop; $i += 86400)
            $dates[] = date('Y-m-d', $i);
        

        PS。我将您 7 月的日期更改为 07-07 以符合您的评论。

        【讨论】:

        • @mocca 86400 是一天中的秒数。 $i 中的值以秒为单位,因此我将其增加 86400 以到达第二天。
        【解决方案6】:
        $start_date = strtotime('2011-05-15');
        $end_date = strtotime('2011-07-30');
        $dates = array();
        for ($i = $start_date; $i<=$end_date; $i+= (strtotime('+1 day') - strtotime('now'))) {
           $dates[] = date('Y-m-d',$i);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-05
          • 1970-01-01
          • 2023-03-30
          • 2015-09-12
          • 1970-01-01
          • 2011-02-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多