日付や時間に関する良く使うPHPのまとめです。
現在の時間をタイムスタンプで取得
time()は、現在の時間を取得し、タイムスタンプを返します。タイムスタンプはUnix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒となるため、データの保存や計算などにはいいですがそのままの値では分かりづらいです。
$today = time();
echo $today;
タイムスタンプを書式化する
date()は、ローカルの日付/時刻を書式化します。以下のフォーマットを入れることで取得できます。
オプションとしてタイムスタンプを指定すると、ファーマットで指定した文字列を返します。デフォルトでは現在の時刻をタイムスタンプで返す「time()」となっているため、タイムスタンプを指定しない場合は現在の日付/時間を書式化することになります。
例:echo date('Y年');
は「2014年」のようになります。
フォーマットの文字をエスケープするには「」(バックスラッシュ)を利用します。
例:echo date('the jS');
は「the 15th」のようになります。
良く使うフォーマット
- 日にち
d
01 から 31j
1 から 31z
0 から 365(年間)- 曜日
D
Mon から Sunl
Sunday から SaturdayN
1(月曜日)から 7(日曜日)w
0 (日曜)から 6 (土曜)- 週
W
年単位の週番号- 月
F
January から Decemberm
01 から 12M
Jan から Decn
1 から 12t
指定した月の日数- 年
L
1なら閏年。0なら閏年ではない。Y
1999または2003y
99 または 03- 午前・午後
a
am または pmA
午前または午後(大文字)AM または PM- 時間
g
1 から 12G
0 から 23h
01 から 12H
00 から 23- 分
i
00 から 59- 秒
s
00 から 59
タイムスタンプを作成
mktime()は引数に与えられた日付をタイムスタンプに変換します。
引数は、mktime (時間,分,秒,月,日,年)となっています。
1 2 3 4 5 |
$Birth_month = 1; $Birth_day = 10; $Birth_year = 1987; $TimeStamp = mktime(0, 0, 0, $Birth_month, $Birth_day, $Birth_year); //560055030 echo date('Y年m月j日',$TimeStamp) //1987年10月1日と出力されます。 |
タイムスタンプに変換
YYYYMMDDをstrtotime()で一度タイムスタンプにした後、data()のフォーマットを利用して変換してみます。
1 2 3 |
$date = 19871001; echo date('Y年m月d日',strtotime($date)); // 1987年10月01日と出力されます。 |
現在の時刻を配列で取得
getdate()は現在の時刻を配列にして返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
print_r(getdate()); /*以下のように出力されます。 Array ( [seconds] => 30 //秒 [minutes] => 10 //分 [hours] => 6 //時間 [mday] => 14 //月単位の日 [wday] => 5 //曜日 [mon] => 3 //月 [year] => 2014 //年 [yday] => 72 //年単位の日 [weekday] => Friday //曜日(フルスペル) [month] => March //月(フルスペル) [0] => 1394777430 //time()の戻り値と同じ )*/ |
何日後、何年後を取得
mktime()を使った場合、日付が40といった数字になっても翌月に持ち越してくれます。
1 2 3 4 5 6 7 8 9 10 |
$today = getdate(); $year = $today['year']; $month = $today['mon']; $day = $today['mday']; // 2年と13ヶ月と40日後 $year = $year+2; $month = $month+13; $day = $day+40; $TimeStamp = mktime(0, 0, 0, $month, $day, $year); echo date('Y/m/d',$TimeStamp); |
strtotime()の引数に入れることでも可能です。
参考URL:http://php-beginner.com/function/datetime/strtotime.html
1 2 |
// 2年と13ヶ月と40日後 echo date('Y/m/d',strtotime("+2 years 13 month 40 days")); |
2つの日付の差分で何日何時間何分後か求める
2014.10.06追記
ある日付まで、あと何日と何時間と何分後かを求めています。記事を公開したときには日付までの日/時間/分をそれぞれ求めていましたが、何日と何時間と何分後かを求めるようにしました。やはり数学が不得意だとこういうところが苦手になってくるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$today = time(); $year = 2014; $month = 10; $day = 1; $TargetTime = mktime(0, 0, 0, $month, $day, $year); $sec = $TargetTime - $today; $rest_day = floor($rimit_sec/86400);//-------------------------------------指定日までの日数 $rest_hour = floor(($rimit_sec/3600)-($rest_day*24));//--------------------指定日までの時間-日数分 $rest_minite = floor(($rimit_sec/60)-($rest_day*24*60)-($rest_hour*60));//-指定日までの分-時間-日数分 $rest_all_hour = floor($rimit_sec/3600); //--------------------------------指定日までの時間 $rest_all_minite = floor($rimit_sec/60); //--------------------------------指定日までの分 echo $year.'年'.$month.'月'.$day.'日は今から'.$rest_day.'日'.$rest_hour.'時間'.$rest_minite.'分後です。<br />'; echo $year.'年'.$month.'月'.$day.'日は今から'.$rest_day.'日後で'.$rest_all_hour.'時間後でもあり'.$rest_all_minite.'分後でもあります。<br />'; |
日付をチェックする
checkdate()は、渡された日付が妥当かチェックします。引数にはcheckdate(month,day,year)のように利用します。
month:月は 1 から 12 の間となります。
day:日は、指定された month の日数の範囲内になります。year がうるう年の場合は、それも考慮されます。
year:年は 1 から 32767 の間となります。
1 2 3 4 5 6 7 8 9 |
$year = 2014; $month = 2; $day = 29; if(checkdate($month,$day,$year)) : echo $year.'年'.$month.'月'.$day.'日は存在します。'; else : echo $year.'年'.$month.'月'.$day.'日は存在しません。'; endif; // この場合2014年はうるう年ではないため、「2014年2月29日は存在しません。」と出力されます。 |
コメントを残す