◆1.数ヶ月前・数ヶ月後の日付を取得する関数: NextPrevMonth()
$ymd = ‘2007-12-31′;
$ymd2n = NextPrevMonth($ymd, 2); //2ヶ月後
$ymd1p = NextPrevMonth($ymd, -1); //1ヶ月前
echo $ymd.’ => ‘.$ymd2n.’ :: ‘.$ymd1p;
function NextPrevMonth($ymd=”, $num=0) {
$a = explode(‘-‘, $ymd);
$tdate = date(‘t’, strtotime($a[0].’-‘.$a[1].’-1′));
if($a[2]==$tdate || !checkdate($a[1]+$num, $a[2], $a[0])) {
$jd = date(‘t’, mktime(0, 0, 0, $a[1]+$num+1, 0, $a[0]));
}else {
$jd = $a[2];
}
return date(‘Y-m-d’, mktime(0, 0, 0, $a[1]+$num, $jd, $a[0]));
}
?>
◆2.土日の場合は休み明けに変更する関数: ChangeSS()
$ymd = ‘2008-05-24′;
$ymd_ch = ChangeSS($ymd);
echo $ymd.’ => ‘.$ymd_ch;
function ChangeSS($ymd=”) {
$ndate = date(‘N’, strtotime($ymd.” 00:00:00″));
switch(TRUE) {
case ($ndate==6) :
return date(‘Y-m-d’, strtotime(“+2 day”, strtotime($ymd.” 00:00:00″)));
case ($ndate==7) :
return date(‘Y-m-d’, strtotime(“+1 day”, strtotime($ymd.” 00:00:00″)));
default:
return $ymd;
}
}
?>
◆3.末日が存在しない場合(*2/29など)に調整する関数:ExistLastDay()
<?php
$ymd = ‘2007-02-29′;
$ymd_ch = ExistLastDay($ymd);
echo $ymd.’ => ‘.$ymd_ch;
function ExistLastDay($ymd=”) {
$a = explode(‘-‘, $ymd);
if(!checkdate($a[1], $a[2], $a[0])) {
$tdate = date(‘t’, strtotime($a[0].’-‘.$a[1].’-1′));
$ymd = $a[0].’-‘.$a[1].’-‘.$tdate;
}
return $ymd;
}
?>