我有一個日期範圍,我需要它按月分組,但我想繼續開始日期和結束日期。到目前爲止,我有這樣的:PHP - 按月份的日期範圍
$interval['from'] = '2017-01-02 00:00:00';
$interval['to'] = '2017-02-06 23:59:59';
$start = Carbon::createFromFormat('Y-m-d H:i:s', $interval['from'])->startOfMonth();
$end = Carbon::createFromFormat('Y-m-d H:i:s', $interval['to'])->startOfMonth()->addMonth();
$separate = CarbonInterval::month();
$period = new \DatePeriod($start, $separate, $end);
foreach ($period as $dt) {
dump($dt);
}
但作爲結果我越來越:
Carbon\Carbon(3) {
date => "2017-01-01 00:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
}
Carbon\Carbon(3) {
date => "2017-02-01 00:00:00.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
}
它是由一個月分組,但我需要整整一個月時間裏,我從
2017-01-02 00:00:00
意思到2017-01-31 23:59:59
2017-02-01 00:00:00
到2017-02-06 23:59:59
。
輸出:
$array = [
0 => [
'from' => '2017-01-02 00:00:00',
'to' => '2017-01-31 23:59:59'
],
1 => [
'from' => '2017-02-01 00:00:00',
'to' => '2017-02-06 23:59:59'
]
];
什麼是才達到它的最簡單的方法?
編輯:這是公認的答案有一點點修飾碳版本,也許有人會需要它:
$interval['from'] = '2017-01-02 00:00:00';
$interval['to'] = '2017-04-08 23:59:59';
$interval_from = Carbon::createFromFormat('Y-m-d H:i:s', $interval['from']);
$interval_to = Carbon::createFromFormat('Y-m-d H:i:s', $interval['to']);
$result = [];
foreach (range($interval_from->month, $interval_to->month) as $x) {
$to = $interval_from->copy()->endOfMonth();
if ($x == $interval_to->month) {
$result[] = ["from" => $interval_from, "to" => $interval_to];
} else {
$result[] = ["from" => $interval_from, "to" => $to];
}
$interval_from = $to->copy()->addSecond();
}
有問題:做完' - > addMonth()'爲什麼你得到的結果不是'2017-03-01'?不知道'碳',但是這不是一個錯誤嗎? – JustOnUnderMillions
我沒有注意到它,但如果我轉儲$期變量,然後我看到結束日期爲'2017-03-01',所以我認爲'CarbonInterval'有一定的魔力。無論如何,當解決方案將在DateTime/DateInterval/DatePeriod類中時不會出現問題。 –