从所选日期将每月日期存储到数组中

时间:2011-11-10 09:36:19

标签: php date datetime

假设Canlender的所选日期为02/09/2011。从2011年9月20日起将每周日期存储到数组

for($i=0; $i<7; $i++)
{
    $WeeklyDate[] = date("Y-m-d", strtotime(2011-09-02) - 86400*$i);
}

我的问题是如何将所选日期的月度日期存储到数组中。

非常感谢

--- ----------更新

monthlyDate的最终结果应如下所示:

$monthlyDate= array{2011-08-03, 2011-08-04, 2011-08-05, 2011-08-06, 2011-08-07 ....2011-08-31, 2011-09-01, 2011-09-02}

2 个答案:

答案 0 :(得分:0)

首先,使用cal_days_in_month计算一个月内的天数,然后按照您的周数继续进行,例如:

$days = cal_days_in_month(CAL_GREGORIAN, 9, 2011);

for($i = 0; $i <= $days; $i++)
{
   $MonthlyDate[] = date("Y-m-d", strtotime(2011-09-02) - 86400*$i);
}

请注意CAL_GREGORIAN是内置常量。

Working Example

答案 1 :(得分:0)

每当程序使用86400递增日期时,由于DST而存在意外输出的风险。

使用大于小时的单位strtotime()(如天,周,月等)可防止任何DST打嗝。注意:可以使用DateTime对象方法,但对于这种情况,这是不必要的开销。

以下是我开发的one-liner date range function的调整后形式。

以下是此案例的online demo

function getDatesFromRange($a,$b,$x=0,$dates=[]){
    while(end($dates)!=$b && $x=array_push($dates,date("Y-m-d",strtotime("$a +$x day"))));
    return $dates;
}
$date='2011-09-02';
$monthlyDate=getDatesFromRange(date("Y-m-d",strtotime("$date -1 month +1 day")),$date);
var_export($monthlyDate);

根据需要/预期输出:

array (
  0 => '2011-08-03',
  1 => '2011-08-04',
  2 => '2011-08-05',
  3 => '2011-08-06',
  4 => '2011-08-07',
  5 => '2011-08-08',
  6 => '2011-08-09',
  7 => '2011-08-10',
  8 => '2011-08-11',
  9 => '2011-08-12',
  10 => '2011-08-13',
  11 => '2011-08-14',
  12 => '2011-08-15',
  13 => '2011-08-16',
  14 => '2011-08-17',
  15 => '2011-08-18',
  16 => '2011-08-19',
  17 => '2011-08-20',
  18 => '2011-08-21',
  19 => '2011-08-22',
  20 => '2011-08-23',
  21 => '2011-08-24',
  22 => '2011-08-25',
  23 => '2011-08-26',
  24 => '2011-08-27',
  25 => '2011-08-28',
  26 => '2011-08-29',
  27 => '2011-08-30',
  28 => '2011-08-31',
  29 => '2011-09-01',
  30 => '2011-09-02',
)