сохранить месячную дату в массиве из выбранной даты - PullRequest
1 голос
/ 10 ноября 2011

Предположим, что выбранная дата от Canlender 02.09.2011. Хранить недельную дату в массиве от 20.09.2011 -

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

У меня вопрос, как сохранить месячную дату в массиве с выбранной даты.

Большое спасибо

--- Обновление ----------

Окончательный результат monthDate должен выглядеть следующим образом:

$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 голосов
/ 24 марта 2017

Всякий раз, когда программы увеличивают дату с помощью 86400, существует риск неожиданного вывода из-за перехода на летнее время.

При использовании strtotime() с единицей измерения, превышающей часы (например, дни, недели, месяцы и т. Д.).) предотвращение любых сбоев DST.Примечание: объектный подход DateTime может использоваться , но для этого случая это ненужные накладные расходы.

Ниже приведена скорректированная форма однострочной функции диапазона дат Я разработал.

Вот демоверсия онлайн для этого случая.

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',
)
0 голосов
/ 10 ноября 2011

Сначала вычислите число дней в месяце, используя 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 являетсявстроенная константа.

Рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...