会員情報などを登録した日時や更新した日時の差を計算する時などには、mktime()関数を使用することで求めることができます。また、このmktime()関数は各日時をUNIX時間 (1970年1月1日0時からの経過秒数)に変換し、時差を求めます。
<?php
$regist1 = "05/12/2006";
$regist2 = "10/05/2007";
list($month1,$day1,$year1) = explode("/",$regist1);
list($month2,$day2,$year2) = explode("/",$regist2);
$regist1 = mktime(0,0,0,$month1,$day1,$year1);
$regist2 = mktime(0,0,0,$month2,$day2,$year2);
$time_difference = $regist2-$regist1;
echo ("時差は");
echo date("Y",$time_difference) - 1970;
echo ("年と");
echo date("m",$time_difference) - 1;
echo ("ヶ月");
echo date("d",$time_difference) - 1;
echo ("日です");
?>
時差は1年と4ヶ月26日です
上記のスクリプトでは、変数$regist1と$regist2をexplode()関数で分割して、mktime()関数でUNIX時間にへの変換を行っています。その変換を行って、時差を計算し、date()関数で文字をフォーマットしています。ここでlist()関数は配列と同様の形式で、複数の変数への代入($month1,$day1,$year1など)を行っています。
入力フォームから入力された日付が正しい値であるかなど、checkdate()関数を使ってチェックをすることができます。
<?php
$check_date = "2008/15/01";
list($year,$month,$day) = explode("/",$check_date);
if(checkdate($year,$month,$day)) {
echo "この日付は正しいです。";
} else {
echo "この日付は正しくありません。";
}
?>
この日付は正しくありません
上記のスクリプトは年月日をexplode()関数で分割して、checkdate()関数で日付の正当性をチェックしています。実行結果は、「月が1から12の間。」の基準から見て、おかしいので、「この日付は正しくありません。」となります(15月などという月は存在しないので)。
ここではスクリプトでセレクトメニューを作成してみます。
通常htmlでセレクトメニューを記述した場合は下記のようになります。
<select name="year">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>年
月の場合は上記の12個分のoptionタグで済みますが、日の場合などは最多で31個も記述しなくてはなりません。phpで記述した場合は以下の用になります。
<select witdh="50" name="year">
<?php
$day =1;
for ($i=0; $i<31; $i++) {
$day_two_digits = sprintf("%02d",$day);
echo("<option value='$year_two_digits'>$day</option>n");
$day++;
}
?>
</select>日