PHPを使って先月の今日を計算する方法

2265 ワード

ある日、1つの問題に出会って、先月の今日を求めます.最初はstrtotime("-1 month")関数を用いて値を求めたが,月長が異なる月の計算結果に誤りがあるという問題があった.例えば、2011-03-31、得られた結果は2011-03-03である.私たちはまずどんな問題を追及しないで、まずどのように問題を解決するかを見ます.このとき、PHPにmktime関数があることを思い出し、以下のコードを自分で書きました.
 
  
echo date("Y-m-d H:i:s", mktime(date("G", $time), date("i", $time),
 date("s", $time), date("n", $time) - 1, date("j", $time), date("Y", $time)));

実行時、結果はstrtotimeの結果と同じであることが分かった.
やはりこの関数に基づいて、直接月を操作できない以上、私たちは天から着手して、先月を得て、それからdateを使ってデータをつなぎます.次のコードがあります.
 
  
$time = strtotime("2011-03-31");
/**
 *
 * @param type $time
 * @return type
 */
function last_month_today($time) {
     $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), - 1, date("Y", $time));
     return date(date("Y-m", $last_month_time) . "-d H:i:s", $time);
}
echo last_month_today($time);

しかし、この時もう一つの問題がありました.2011-02-31のような日付はありません.どうすればいいですか.現在の需要は、このような日付に対して当月の最終日を表示します.次のコードがあります.
 
  
 $time = strtotime("2011-03-31");
/**
 * , ,
 * @param type $time
 * @return type
 */
function last_month_today($time){
    $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), 0, date("Y", $time));
    $last_month_t =  date("t", $last_month_time);
    if ($last_month_t < date("j", $time)) {
        return date("Y-m-t H:i:s", $last_month_time);
    }
    return date(date("Y-m", $last_month_time) . "-d", $time);
}
echo last_month_today($time);

ここで注意すべき点は、date("Y-m",$last_month_time)である.「-d」というコード.コードを書く過程で「Y-」と書くと.date(”m”, $last_month_time) . 「-d」は年越しに問題がある.この点はやはりこの文章を書いたときに発見された.
この方法に加えて、年月日を算出して文字列をつづることもできます.ここでは純粋な文字列操作です.