PHPの日付範囲内で各月の最終日を取得する方法は?
入力:
$startdate = '2013-01-15'
$enddate = '2013-03-15'
私が望む出力は次のとおりです。
2013-01-31 1月終了日
2013-02-28 2月終了日
2013-03-15 ※3月終了日は「2013-03-31」ですが、終了日は「2013-03-15」です。
だから欲しい2013-03-15
。
どうやってやるの?
PHPの日付範囲内で各月の最終日を取得する方法は?
入力:
$startdate = '2013-01-15'
$enddate = '2013-03-15'
私が望む出力は次のとおりです。
2013-01-31 1月終了日
2013-02-28 2月終了日
2013-03-15 ※3月終了日は「2013-03-31」ですが、終了日は「2013-03-15」です。
だから欲しい2013-03-15
。
どうやってやるの?
将来的には、自分でコードを書いてみてください。特定の部分で行き詰まっている場合は、ヘルプをリクエストできます。この 1 回の例外:
<?php
$startdate = new DateTime('2013-01-15');
$enddate = new DateTime('2013-04-15');
$year = $startdate->format('Y');
$start_month = (int)$startdate->format('m');
$end_month = (int)$enddate->format('m');
for ( $i=$start_month; $i<$end_month; $i++) {
$date = new DateTime($year.'-'.$i);
echo $date->format('Y-m-t').' End date of '.$date->format('F');
}
echo $enddate->format('Y-m-d');
出力します:
2013-01-31 End date of January
2013-02-28 End date of February
2013-03-31 End date of March
2013-04-15
開始日と終了日が異なる年である場合、これは機能しないことに注意してください。これは練習問題として残しました。
function get_months($date1, $date2) {
$time1 = strtotime($date1);
$time2 = strtotime($date2);
$my = date('mY', $time2);
$months = array(date('Y-m-t', $time1));
$f = '';
while($time1 < $time2) {
$time1 = strtotime((date('Y-m-d', $time1).' +15days'));
if(date('F', $time1) != $f) {
$f = date('F', $time1);
if(date('mY', $time1) != $my && ($time1 < $time2))
$months[] = date('Y-m-t', $time1);
}
}
$months[] = date('Y-m-d', $time2);
return $months;
}
$myDates = get_months('2005-01-20', '2005-11-25');
$myDates には、必要な出力が含まれます。年が違っても大丈夫です。ロジックはこちらのURLから
私は機能を少し変更しました:
function get_months($date1, $date2) {
$time1 = strtotime($date1);
$time2 = strtotime($date2);
$my = date('mY', $time2);
$f = '';
while($time1 < $time2) {
$time1 = strtotime((date('Y-m-d', $time1).' +15days'));
if(date('F', $time1) != $f) {
$f = date('F', $time1);
if(date('mY', $time1) != $my && ($time1 < $time2))
$months[] = array(date('Y-m-01', $time1),date('Y-m-t', $time1));
}
}
$months[] = array(date('Y-m-01', $time2),date('Y-m-d', $time2));
return $months;
}