秒数から日時分秒を取得
秒数から「日時分秒」を計算して、連想配列にして返す。
function get_time($sec) {
define("DAY", 86400);
define("HOUR", 3600);
define("MIN", 60);
$time['day'] = floor($sec/DAY);
$sec %= DAY;
$time['hour'] = floor($sec/HOUR);
$sec %= HOUR;
$time['min'] = floor($sec/MIN);
$time['sec'] = $sec % MIN;
return $time;
}
日数差の計算
タイムスタンプで秒差を求めた後、上記get_time(秒数から日時分秒を取得)を呼んで、「日時分秒」の形式に変換します。
//$time1, $time2にはタイムスタンプ値がセットされている
//差分(秒差)を求める
$diff = abs($time1 - $time2);
//日時分秒に変換
$date = get_time($diff);
echo $time['day']."日 ".$time['hour']."時間 ".$time['min']."分 ".$time['sec']."秒 ";
strtotimeの用法
一般的な書式
//日付をタイムスタンプに変換
strtotime("2004/8/31");
//昨日の日付を取得
echo date("Y/m/d", strtotime("-1 day"));
//今日の日付を取得
echo date("Y/m/d", strtotime("now"));
//明日の日付を取得
echo date("Y/m/d", strtotime("+1 day"));
//3週間後の日付を取得
echo date("Y/m/d", strtotime("+3 week"));
//1ヶ月と15日後の日付を取得
echo date("Y/m/d", strtotime("+1 month 15 day"));
//3日と5時間後
strtotime("+3 days 5 hours");
//次の月曜日
strtotime("next Monday");
//先週の金曜日
strtotime("last Friday");
//来年3か月後の日付を取得
echo date("Y/m/d",strtotime("next year +3 months"));
//前後2日の日付を取得
for ($i=-2; $i<=2; $i++) {
echo "".date("Y/m/d", strtotime("+$i day"));
}
strtotimeが使えない日付文字列
split関数+list関数+mktime関数を組み合わせて変換します。
$strdate = "2004 5 30 10 30 50";
//splitのセパレータは"-", ":", "/", " "
list($y, $m, $d, $h, $i, $s) = split("[-:/ ]", $strdate);
$time = mktime($h, $i, $s, $m, $d, $y);
mktimeの用法
指定日数後の日付
「日」のパラメータを「指定日+経過日数」とする。
//年月日
$yyyy = 2004;
$mm = 4;
$dd = 1;
//間隔日数
$int_day = 100;
//タイムスタンプを取得
$ts = mktime(0, 0, 0, $mm, $dd + $int_day, $yyyy);
echo date("Y/m/d", $ts);
本日から30日前の日付を求める。
$timestamp = mktime(0, 0, 0, date("m"), date("d")-30, date("Y"));
echo date("Y年n月j日", $timestamp);
月末の日付
「日」のパラメータに「0」を指定する。
//年月日
$yyyy = 2004;
$mm = 7;
//前月末の日付を求める(当月1日の前日)
$ts = mktime(0, 0, 0, $mm, 0, $yyyy);
echo date("Y/m/d", $ts)."
";
//今月末の日付を求める
$ts = mktime(0, 0, 0, $mm + 1, 0, $yyyy);
echo date("Y/m/d", $ts);
◎0月とは前の月、0日とは前の日。
・mktime(0, 0, 0, 1, 0, 2005)...2005/1/0 → 2004/12/31
・mktime(0, 0, 0, 0, 1, 2005)...2005/0/1 → 2004/12/1
checkdateの用法
うるう年チェック
function isLiadpYear($yyyy) {
return Checkdate(2, 29, $yyyy);
}
有効な日付を取得
checkdate関数の戻り値がFALSEになるまで処理を続けるという使い方で、指定年月1日から末日までの日付を取得することができる。
$yyyy = 2005;
$mm = 4;
$dd = 1;
while (checkdate($mm, $dd, $yyyy)) {
echo $dd;
$dd += 1;
}
処理時間の計算
list($usec1, $sec1) explode(" ", microtime());
// 時間のかかる処理
list($usec2, $sec2) explode(" ", microtime());
$time = $usec2+$sec2-$usec1-$sec1;