[PHP-users 25223] Re: 1ヶ月前の日付の取得について

Yusuke ITO ito_yusuke @ white.livedoor.com
2005年 3月 31日 (木) 12:22:55 JST


伊東です、

--ss332jp<ss332jp @ yahoo.co.jp> wrote:
>期間の計算に関する原則的な取扱いは、民法に規定されています。
>下記が参考になると思います。
>
>期間計算の一般原則:
>http://www5d.biglobe.ne.jp/~Jusl/TomoLaw/KikanKeisan.html
>
>結果、2005年3月30日の1ヶ月前の日付は、2005年2月28日になります。

ここに載ってるのは、たぶん起算日<満了日のケースですね。
逆(起算日>満了日)も同じ計算方法でよければ、素直に実装してこんな感じで納得して頂けるかと。

<?php
  echo(date('Y-m-d,', lastmonth(3, 30, 2005)));
  echo(date('Y-m-d,', nextmonth(1, 31, 2005)));

  function lastmonth($m, $d, $y){
    if(checkdate($m, $d, $y)){
      if($m == 1){
        $y --;
        $m = 12;
      }else{
        $m --;
        if(!checkdate($m, $d, $y)){
          $d = date('t', mktime(0, 0, 0, $m, 1, $y));
        }
      }
      return(mktime(0, 0, 0, $m, $d, $y));
    }else{
      return(false);
    }
  }

  function nextmonth($m, $d, $y){
    if(checkdate($m, $d, $y)){
      if($m == 12){
        $y ++;
        $m = 1;
      }else{
        $m ++;
        if(!checkdate($m, $d, $y)){
          $d = date('t', mktime(0, 0, 0, $m, 1, $y));
        }
      }
      return(mktime(0, 0, 0, $m, $d, $y));
    }else{
      return(false);
    }
  }

?>

長いな。
だれかコンパクトにしてくださいw

--
伊東 祐介
ito_yusuke @ white.livedoor.com




-----------------------------------------------
2GBまでメールや画像など貯め放題!さらに特典いっぱい♪
livedoor ギガメーラープラス 【新登場】
http://gigamailerplus.livedoor.com/



PHP-users メーリングリストの案内