日付に関する関数

Last-modified: 2007-06-21 (木) 10:00:59

日付に関する関数

入力月の月末の年月日を返す

function getumatu($ymd)
{
list($y, $m, $d) = explode("/", $ymd, 3);
  $m++;
    if ($m == 13) {
    $m = 1;
    $y++;
    }
  $_ymd = "$y/$m/$d";
  $ymd = mk_day($_ymd);
  $ymd-=1;
  $ymd = date('Y/n/j',$ymd);
  return $ymd;
}

日付をタイムスタンプに変換

function mk_day($day)
{
  list($y, $_m, $_d) = explode("/", $day, 3);
  $m = intval($_m);
  $d = intval($_d);
  $MKT = mktime(0, 0, 0, $m, $d, $y);
  return $MKT;
}

日付から次の日を出す

function nextday($day)
{
  $ymd = $ymd + 86400;
  $ymd = date('Y/n/j',$ymd); //日付式に変換
  return $ymd;
}

日付から前の日を出す

function prevday($day)
{
  $ymd = $ymd - 86400;
  $ymd = date('Y/n/j',$ymd);//日付式に変換
  return $ymd;
}

日付の比較

function cmpday($day1, $day2)
{
  $day1 = mk_day($day1); //タイムスタンプに変換後の日付
  $day2 = mk_day($day2); //↑と同じ
  if ($day1 == $day2) return 0;
  elseif ($day1 < $day2) return 1;
  else return -1;
}

期間1から期間2の日付を配列にする

function listdays($day1, $day2)
{
  while (cmpday($day1, $day2) >= 0) {
    $A[] = $day1;
    $day1 = nextday($day1);
  }
  return $A;
}

月単位に関する関数

入力月の一ヶ月先を$y年$m月に戻す

function nextmonth($y, $m)
{
  $m++;
  if ($m == 13) {
    $y++;
    $m = 1;
  }
  return array($y, $m);
}

入力された月の1ヶ月前を$y年$m月に戻す

function prevmonth($y, $m)
{
  $m--;
  if ($m < 1) {
    // $mが12月なら$y年を1引く
    $m = 12;
    $y--;
  }
  return array($y, $m);
}

曜日に関する関数

曜日のリストを作る

$listdays:日付のリスト(1~月末まで)
返り値 $Y:第○週の○に入る数字をキーにした1週間の日付の配列

function list_week($listdays)
{
  $i = 1;
  foreach($listdays as $date) {
    $W = strftime('%u', $date);
    if ($W != 7)$day[] = $date;
    else {
      $day[] = $date;
      $Y[$i++] = $day;
      $day = array();
    }
  }
  if (count($day) != 0)$Y[] = $day;
  return $Y;
}