[PHP-users 17795]Re: 指定曜日の日付を取得する関数

aiko vvv_aiko_vvv @ hotmail.com
2003年 9月 10日 (水) 10:17:15 JST


お世話になっております。きしかわです。

[PHP-users 17650]指定日付から週始と週終を得るには?
[PHP-users 17712]指定曜日の日付を取得する関数
にて皆様のアドバイスをもとに、
指定年1年間の月曜日のリスト作成関数を作成しました。

動作確認済みです。
ただ"未来は表示できない"様にする個所が少し自信がありません。
(動いてはいる様なのですが。どこか穴がありそうな気がして…)
ソースを見てお気づきの点等ございましたら、アドバイスを頂ければうれしいです。


よろしくお願いします。

#吉井様
 時間がなくて、Pearを試すことが出来ていませんが、有益な情報ありがとうござい
ます。
 今後、使用してみたいと思います。
 
#高橋様
 実装して頂きありがとうございます。


//////////////////////////////////////////
//
// test.php
//
<?php
$sInitYear=getYear();
?>
<html>
<head>
<script language="JavaScript">
function callSelfWin()
{
  var objForm=document.fm1;
  if( <?=$sInitYear?> == objForm["TYear"].value ) return ;

  objForm.action = "<?=$_SERVER[PHP_SELF]?>";
  objForm.method = "POST";
  objForm.submit();
}
</script>
</head>
<body>
<form name="fm1">
<?php
  echo "<input type=\"text\" value=" . $sInitYear . " name=\"TYear\" size=5 
onBlur=\"callSelfWin();\">" ;
  echo makeList() ;
?>
</form>
</body>
</html>

<?php
// 年の値を得る。
//  ・POST値が渡ってきていなければ現在年を返す。
//
function getYear()
{
  $sWork="";
  if( isset( $_POST["TYear"] )){
    $sWork=intval($_POST["TYear"]);

    if( 1970 <= $sWork &&  $sWork <= 2037 ) {
      $sInitYear=$sWork ;
    }
  }

  if($sWork=="")	$sInitYear=date(Y);

  return $sInitYear ;
}

// リスト作成
function makeList()
{
  global $sInitYear ;
	
  //-------------------
  // 日付リストの記入
  //-------------------
  $aToday=array();	// 今日の日付/時刻情報
  $aThisWeek=array();	
  $sListDef="";

  // 対象曜日の日付配列を取得する。※ここでは月曜日。
  $nWDay=1; // 0(日曜)〜6(土曜)
  $aMonday = get_allweek( $sInitYear , $nWDay ) ;

  // 日付リストのデフォルト値を取得する。
  $aToday=getdate();
  $aThisWeek = get_week( $sInitYear , $aToday["mon"], $aToday["mday"] ) ;

  $nListDef  = $aThisWeek[0] ;	// 月曜日のデフォルト値

  $sTag .= "  <select name=\"LMonday\" class=\"selectNormal\" >\n" ;

  foreach( $aMonday as $key => $nTimeStamp ) {

    $sWork="" ;

    if( $aToday[0] < $nTimeStamp )	break ;	// 未来は表示できない。

    if( $nTimeStamp == $nListDef )	$sWork=" selected" ;

    $sText = date('m/d', $nTimeStamp);
    $sTag .= "    <option value=" . $nTimeStamp  . $sWork . ">" . $sText . 
"</option>\n" ;
  }

  $sTag .= "  </select>\n" ;

  return $sTag ;
}

// # 無田さま create. 
// 指定日を含む週の月曜/土曜のタイムスタンプを返す
function get_week($yyyy, $mm, $dd) 
{ 
  $now_date = mktime(0,0,0,$mm,$dd,$yyyy);
  $w = (intval(date("w",$now_date)) + 6) % 7;
  $this_week[0] = $now_date - 86400 * $w;
  $this_week[1] = $now_date + 86400 * (6 - $w);
  return $this_week;
}

// # 重松さまcreate.
// 指定年の対象曜日の日付(※タイムスタンプ)を配列で返す。
function get_allweek($year, $wday)
{
  $secs = 60 * 60 * 24;
  $time = mktime(0,0,0,1,1,$year - 1900);
  $info = getdate($time);
  $time += (($wday - $info['wday'] + 7) % 7) * $secs;

  $result = array();
  $diff = 7 * $secs;
  for ($i = 0; $i < 52; ++$i) {
    $result[] = $time;
    $time += $diff;
  }

  if ($time < mktime(0,0,0,1,1,$year + 1 - 1900)) {
    $result[] = $time;
  }

  return $result;
}
?>
//////////////////////////////////////////



きしかわあいこ。

_________________________________________________________________
きっと見つかるあなたの新居  不動産情報は MSN 住宅で  
http://house.msn.co.jp/ 



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