1ヶ月後の日付を返す(1ヶ月飛ばさない)
<?php | |
/** | |
* getCorrectedNextMonth | |
* | |
* 年月日を渡すとその翌月の当日を調整して返す | |
* | |
* 2011-01-31を渡すと、2011-02-31や2011-03-03ではなく | |
* 翌月内に収まるようにして2011-02-28を返す | |
* 月額課金をわかり易くするために使う。 | |
* | |
* @access public | |
* @param string $date | |
* @return string $date | |
*/ | |
public function getCurrectedNextMonth($date) | |
{ | |
// 年月日に分断 | |
$y = date('Y', strtotime($date)); | |
$m = date('n', strtotime($date)); | |
$d = date('j', strtotime($date)); | |
// 年越しの処理 | |
if($m+1>12) { $m=1; $y++; } else { $m++; } | |
// 1ヶ月後の日付生成 | |
if(checkdate($m, $d, $y)) { | |
return date('Y-m-d', strtotime(sprintf('%04d-%02d-%02d', $y, $m, $d))); | |
} else { | |
return date('Y-m-d', strtotime(sprintf('%04d-%02d-01 -1 day', $y, ($m+1)))); | |
} | |
} |
This comment has been minimized.
This comment has been minimized.
年越しの処理忘れていたので追記 |
This comment has been minimized.
This comment has been minimized.
関数名と、pearコメントを修正 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
例えば1月31日からstrtotime()関数などで1ヶ月先を指定すると、2月の28日間(閏年なら29日間)をすっとばし、3月3日になってしまう。
これでは日本でよくある「月額課金」に対応できないため、初回支払い日が翌月に存在しない場合、翌月の最終日を自動的に設定し、翌月を必ず口語で言う所の「1ヶ月後」とする関数。
大したことやってないけど、一応覚え書きとして。
最終日の出し方は、出したい付きの翌月1日から1日前、という相対指定で実現。29行目。