人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについての質問です。
次のようなことがやりたいのですが、うまい方法があれば教えてください。

■日付を指定して、その週の最初(日曜日)と最後(土曜日)の日付を取得したい

例[2008/08/21]を与えると、[2008/08/17]と[2008/08/23]が取得できる


●質問者: southgate_01
●カテゴリ:インターネット ウェブ制作
✍キーワード:23 PHP うまい 土曜日 日曜日
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● standard_one
●100ポイント

うまい方法というのが何を指すのかはわかりませんが、関数で組むならこんな感じかと。

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";

}

◎質問者からの返答

ありがとうございます。

期待通りの結果が得られました。


2 ● pahoo
●100ポイント ベストアンサー

こんな感じでどうでしょう。

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関数でエラーを出します。

◎質問者からの返答

ありがとうございます。

期待通りの結果が得られました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ