次のようなことがやりたいのですが、うまい方法があれば教えてください。
■日付を指定して、その週の最初(日曜日)と最後(土曜日)の日付を取得したい
例[2008/08/21]を与えると、[2008/08/17]と[2008/08/23]が取得できる
こんな感じでどうでしょう。
function getLastSunday($year, $month, $day) { $today = mktime(0, 0, 0, $month, $day, $year); $arr = getdate($today); $ww = $arr['wday']; //指定日の曜日番号 return $today - $ww * 24 * 60 * 60; //その週の日曜日のUNIX TIME } function getSunSat($yyyymmdd) { if (($arr = split('\/', $yyyymmdd)) == FALSE) return FALSE; //年月日に分解 if (count($arr) != 3) return FALSE; //引数が異常 if (checkdate($arr[1], $arr[2], $arr[0]) == FALSE) return FALSE; //年月日が異常 $sunday = getLastSunday($arr[0], $arr[1], $arr[2]); //その週の日曜日のUNIX TIME $saturday = $sunday + 6 * 24 * 60 * 60; //その週の土曜日のUNIX TIME return array(date('Y/m/d', $sunday), date('Y/m/d', $saturday)); }
ご要望の関数は getThisWeek です。
getThisWeek('2008/08/21') のように引数を与えると、日曜日と土曜日が配列の形で返ってきます。
引数は、'年/月/日' のようにスラッシュで区切ってください。1桁の月日の場合、'0' で埋めても埋めなくても構いません。
以下のように使ってください。
list($sunday, $saturday) = getSunSat('2008/08/21');
引数のエラーチェックは行っていますが、UNIX TIMEを使っているので、極端に未来だったり、極端に過去の日付だったりすると、checkdate関数でエラーを出します。
うまい方法というのが何を指すのかはわかりませんが、関数で組むならこんな感じかと。
b2e( 2008,8,21 );
function b2e( $year, $month, $day )
{
$adj = array( "Mon" => 1, "Tue" => 2, "Wed" => 3, "Thu" => 4, "Fri" => 5, "Sat" => 6, "Sun" => 0);
$ts = mktime( 0, 0, 0, $month, $day, $year );
$dow = date( "D", $ts );
$ts = mktime( 0, 0, 0, $month, $day-$adj[$dow], $year );
$day_b = date( "Y/m/d", $ts );
$ts = mktime( 0, 0, 0, $month, $day+(6-$adj[$dow]), $year );
$day_e = date( "Y/m/d", $ts );
echo "[" . $day_b . "] - [" . $day_e . "]\n";
}
ありがとうございます。
期待通りの結果が得られました。
こんな感じでどうでしょう。
function getLastSunday($year, $month, $day) { $today = mktime(0, 0, 0, $month, $day, $year); $arr = getdate($today); $ww = $arr['wday']; //指定日の曜日番号 return $today - $ww * 24 * 60 * 60; //その週の日曜日のUNIX TIME } function getSunSat($yyyymmdd) { if (($arr = split('\/', $yyyymmdd)) == FALSE) return FALSE; //年月日に分解 if (count($arr) != 3) return FALSE; //引数が異常 if (checkdate($arr[1], $arr[2], $arr[0]) == FALSE) return FALSE; //年月日が異常 $sunday = getLastSunday($arr[0], $arr[1], $arr[2]); //その週の日曜日のUNIX TIME $saturday = $sunday + 6 * 24 * 60 * 60; //その週の土曜日のUNIX TIME return array(date('Y/m/d', $sunday), date('Y/m/d', $saturday)); }
ご要望の関数は getThisWeek です。
getThisWeek('2008/08/21') のように引数を与えると、日曜日と土曜日が配列の形で返ってきます。
引数は、'年/月/日' のようにスラッシュで区切ってください。1桁の月日の場合、'0' で埋めても埋めなくても構いません。
以下のように使ってください。
list($sunday, $saturday) = getSunSat('2008/08/21');
引数のエラーチェックは行っていますが、UNIX TIMEを使っているので、極端に未来だったり、極端に過去の日付だったりすると、checkdate関数でエラーを出します。
ありがとうございます。
期待通りの結果が得られました。
ありがとうございます。
期待通りの結果が得られました。