[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 メーリングリストの案内