Я определенно согласен с решением @FractalizeR и добавлением @elviejo, оно помогло мне двигаться вперед. Но я считаю, что столкнулся с некоторыми проблемами, и они могут помочь другим: (+ поправьте меня, если я ошибаюсь)
- Важно отметить: и
$StartDate
, и $StopDate
относятся к типу timestamp
, но на самом деле не date
-тип (1) . Поэтому я изменил параметры функции на $myTimestamp
в надежде не запутать других.
Например:
$StartDate = strtotime("Sept 2010");
$StopDate = time(); // current timestamp
- Для функций @elviejo:
- приведение типов: простой
(int)
не работал для меня (PHP5), поэтому я использовал intval()
вместо
- Работа с
%
дает результаты в диапазоне от 0 до 11, а месяцы в диапазоне от 1 до 12 (2) . Таким образом, в функции GetDateFromMonths($months)
мы должны +1
результат
- Поскольку мы добавляем 1 к
%
в функции GetDateFromMonths($months)
, нам придется вычесть 1 из $dateAsMonths
в функции GetMonthsFromDate($myTimestamp)
.
Это дает мне следующий код:
function GetMonthsFromDate($myTimestamp)
{
$year = (int) date('Y',$myTimestamp);
$months = (int) date('m', $myTimestamp);
$dateAsMonths = 12*$year + $months - 1;
return $dateAsMonths;
}
function GetDateFromMonths($months)
{
$years = intval($months / 12);
$month = intval($months % 12) + 1;
$myTimestamp = strtotime("$years/$month/01"); //makes a date like 2009/12/01, and translate it to a timestamp
return $myTimestamp;
}
Начинается со следующего for
-loop:
for ($i = GetMonthsFromDate($StartDate); $i <= GetMonthsFromDate($StopDate); $i++)
{
echo(date('d M Y',GetDateFromMonths($i))."</br>");
}
Который дал желаемый результат. Имеют ли смысл мои замечания?
Примечания:
(1) Я даже не думаю, что date
существует как тип в PHP , но я могу ошибаться.
(2) Январь 1, февраль 2, ... ноябрь 11, но декабрь 0 . Это не даст желаемого результата.