PHPで日時を扱う

タイムスタンプとは

  • PHPの日時に関する関数では、「1970年1月1日0時」から経過した秒数で表現する(UNIXタイムスタンプ)を使用します
<?php
echo time();

実行すると、今現在のタイムスタンプである秒数が表示されます。

date関数

  • date(日時の書式)
<?php
echo date( '今日は、Y年m月j日です。');
printf関数
  • printf('フォーマットの文字列', %変換指定子1の値, %変換指定子2の値, …)
  • 書き出す文字列の形式を先に指定して、後で実際の値を指定します


printf関数で今日の日付を表示

  • 変換指定子
  • 文字列なら「%s」、変数なら「%d」
<?php
$form = '%s%d年%d月%d日です。';
printf ( $form, '今日は、', date('Y'), date('m'), date('j'));

日付/時間関数

  • 日付/時間を扱う標準関数

日付/時間関数の種類

  • time()
  • mktime()
  • strtotime()
<?php

// 日付や時間に関する関数

// Unixタイムスタンプ(1970/1/1 00:00:00からの経過秒数)

var_dump(time());
var_dump(mktime(7,55,0,6,7,2012)); // 2012/6/7 7:55:00
var_dump(strtotime("2012/6/7 7:55:00"));
var_dump(strtotime("last Sunday"));
var_dump(strtotime("+2 day"));
date関数
  • date関数は、指定した日付のフォーマットで文字列を変換する関数です

日付フォーマットに変換された文字列 = date( 日付フォーマット, 【タイムスタンプ】);

<?php

// 日付や時間に関する関数

// Unixタイムスタンプ(1970/1/1 00:00:00からの経過秒数)

var_dump(time());
var_dump(mktime(7,55,0,6,7,2012)); // 2012/6/7 7:55:00
var_dump(strtotime("2012/6/7 7:55:00"));
var_dump(strtotime("last Sunday"));
var_dump(strtotime("+2 day"));

echo date("z", strtotime("last Sunday"));


フォーマット文字列

  • 「2013/09/25」のような日付の表示を指定する

指定値 説明 戻り値の例
Y 年(4桁) 2012
y 年(2桁) 12
m 月(2桁) 04
n 4
d 日(2桁) 09
j 9
g 時(12時間単位) 4
G 時(24時間単位) 16
h 時(12時間単位で2桁) 04
H 時(24時間単位日2桁) 16
i 分(2桁) 06
s 秒(2桁) 46
a 午前または午後(小文字) pm
A 午前または午後(大文字) PM
L うるう年かどうか 1:うるう年 0:うるう年以外
t 月の日数 28から31
U UNIXタイムスタンプ 1335768642
w 曜日(数値) 0:日曜~6:土曜
W 1年で何週目か 11
z 1年で何日目か 11

<?php
  print date ( 'Y/m/d H:i:s' );
  print '<br>';

  print date ( 'Y/m/d H:i:s', time() );
  print '<br>';

  print date ( 'Y年m月d日 H時i分s秒' );
  print '<br>';

  print date ( 'y-n-j Ah時i分s秒' );
  print '<br>';
  
  $week = array ( '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' );
  print '今日は' . $week[date ( 'w' )] . 'です';
mktime関数
  • mktime関数は、現在から一週間後、二ヵ月後 等の日付時刻を取得したい場合に使用する関数です
  • この関数で取得した値をdate関数の引数【タイムスタンプ】として設定することにより、過去・未来の日付時刻が取得できます

タイムスタンプ = mktime ( 時間, 分, 秒, 月, 日, 年 );

<?php
  // 現在日付時刻を設定
  $year = date ( 'Y' );
  $month = date ( 'm' );
  $day = date ( 'd' );
  $hour = date ( 'G' );
  $minute = date ( 'i' );
  $second = date ( 's' );

  // 一週間後を設定
  $OneWeekLater = mktime ( 0, 0, 0, $month, $day + 7, $year );
  print '一週間後は' . date ( 'Y/m/d', $OneWeekLater ) . 'です<br>';
  
  // このように書いても同じ結果です
  print '一週間後は' . date ( 'Y/m/d', mktime ( 0, 0, 0, date ( 'm' ), date ( 'd' ) + 7, date ( 'Y' ) ) ) . 'です<br>';

  // 今年の7月末日を設定
  // (引数の「日」に0を設定すると、前月の末日が自動設定されます。)
  $JulyLast = mktime ( 0, 0, 0, 8, 0, $year );
  print '今年の7月末日は' . date( 'y年m月d日', $JulyLast ) . 'です<br>';

  // 5日後の1時間前を設定
  $Before = mktime ( $hour - 1, $minute, $second, $month, $day + 5, $year );
  print '5日後の1時間前は' . date ( 'y年m月d日 H時i分s秒', $Before ) . 'です<br>';