練習問題

練習問題を通して本レッスンで学んだことを確認してみましょう!

問題1

PHPを使って、今日から一週間の日付のうち一日を選択するセレクトボックスを表示してください。

ヒント

現在時刻のタイムスタンプを返す、time()関数と、for構文を使って、日付処理を行います。

答え

セレクトボックスを使うには、<select>タグと選択肢には<option>タグを使うのでした。また、time()関数で、現在時刻を求めたら、それに、(24*60*60)秒を加算していくことで、日付を1日ずつ加算していけます。また、date()関数を使えば、タイムスタンプを任意の日付形式で出力できます。

file:1-select-week.php

<form><select name="week">
<?php
$t = time(); // 本日の日付
for ($i = 0; $i < 7; $i++) {
    echo "<option>";
    echo date("Y/m/d", $t);
    echo "</option>";
    $t += (24 * 60 * 60);
}
?>
</select></form>
画面
画面

問題2

2010年以降で2月21日が水曜日の年について、10月16日が何曜日なのか調べてください。

ヒント

あまり、実用的ではない問題ですが、
PHPで曜日を求めるdate()関数や、文字列を日付に変換するstrtotime()関数の使い方を確認するのにもってこいの問題です。
あまり複雑に考えず、for構文などを利用して解いてみてください。

答え

この問題は、2つの問題を解く必要があります。まず、はじめに、(1)2月21日が水曜日になる西暦年を調べて、その後、(2)西暦年の10月16日の曜日を調べます。

まず(1)を解くには、for構文を使って、西暦年を1年ずつ加算しながら曜日を調べていきます。そして、求めた西暦年を利用して、10月16日の曜日を求めます。

file: 2-search-date.php

<?php
// (1) 2月21日が水曜日になる西暦年を調べる
$y = 2010;
for (;;) {
    $t = strtotime("$y-2-21");
    $w = date("w", $t);
    if ($w == 3) break;
    $y++; // 一年足す
}
echo "2月21日が水曜日になるのは、{$y}年です。<br/>";
// (2) 求めた(1)の西暦を利用して10月16日の曜日を求める
$t = strtotime("$y-10-16");
$w = date("w", $t);
$weeklist = array("日曜","月曜","火曜","水曜","木曜","金曜","土曜");
$ans = $weeklist[$w];
echo "{$y}年10月16日は、{$ans}です。";
画面
画面