我有兩個日期 - 開始日期和結束日期。我需要返回月份的數組(「YM」格式),其中包括起始和結束日期之間的每個月,還有幾個月,這些日期是在我已經試過:返回包含開始日期和結束日期的月數
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-15');
$month = $start;
while($month <= $end) {
$months[] = date('Y-m', $month);
$month = strtotime("+1 month", $month);
}
的問題是在上面的例子中,它只將「2010-08」添加到數組中,而不是「2010-09」。我覺得解決方案應該是顯而易見的,但我看不到它。
請注意,這應該考慮到像帳戶情況:
$start = strtotime('2010-08-20');
$end = strtotime('2010-08-21');
// should return '2010-08'
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-01');
// should return '2010-08,2010-09'
$start = strtotime('2010-08-20');
$end = strtotime('2010-10-21');
// should return '2010-08,2010-09,2010-10'
此外,PHP的我的主機上的版本是5.2.6,因此具有這些範圍內的工作。
我使用的解決方案是基於以下答案。設置$start
到月份的第一天。然而,我不能僅僅使用strtotime()
,而是必須使用我在網上找到的另一個功能。
function firstDayOfMonth($uts=null)
{
$today = is_null($uts) ? getDate() : getDate($uts);
$first_day = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
return $first_day[0];
}
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-15');
$month = firstDayOfMonth($start);
while($month <= $end) {
$months[] = date('Y-m', $month);
$month = strtotime("+1 month", $month);
}
我真的很想喜歡你的解決方案,因爲它的清潔/邏輯,當我使用'的strtotime(「這個月的第一天」,$月份)在我的Mac測試'它工作正常,返回'$ month'中定義的月份的第一天。但是當我在主機上完成同樣的事情時,它會返回1970-01-01。 – ggutenberg 2010-08-21 06:20:09
這讓我走上了正軌。在問題中提供了完整的解決方案。 – ggutenberg 2010-08-21 10:11:27