日付を扱う

エポックタイム(UNIXタイム)

  • 1970年1月1日 00:00:00(UTC協定世界時)からの通算秒
  • この「経過秒」を基準にして、コンピューターでは「日付」と「時刻」を扱います



タイムスタンプとは

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

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( 日付フォーマット, 【タイムスタンプ】);

タイムスタンプとは、GMT:グリニッジ標準時(197011000)からの通算秒数です
【タイムスタンプ】を省略した場合は、現在の日付時刻(time( ))となります
<?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>';
PHPでカレンダー
<?php
//現在の「年月」を取得
$now_year = date( 'Y' );
$now_month = date( 'n' );

//1日(月初)のタイムスタンプから「曜日」を取得
$first_day = mktime( 0, 0, 0, $now_month, 1, $now_year );
$first_weekday = date( 'w' , $first_day );
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>今月のカレンダー</title>
</head>
<body>
<h3><?php echo $now_year; ?><?php echo $now_month; ?></h3>
<table border="1">
<tr>
<th class="sun"></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th class="sat"></th>
</tr>
<?php
echo '<tr>';  // 最初の<tr>
$weekday = 0; //曜日のカウンタ

//1日の曜日まで空欄必要
while( $weekday != $first_weekday ){
  echo ('<td>&nbsp;</td>');
  $weekday++;
}
for( $day = 1; checkdate( $now_month, $day, $now_year ); $day++ ){
  //土曜まで書いたなら日曜に戻して
  //行を変える
  if( $weekday > 6 ){
    $weekday = 0;
    echo ('</tr>' . "\n");
    echo ('<tr>');
  }

  //文字の色を決める
  switch( $weekday ){
    case 0 : //日曜
      $color = 'red';
      break;
    case 6 : //土曜
      $color = 'blue';
      break;
    default : //月曜~金曜
      $color = 'black';
  }
  //1マス表示
  echo ('<td><font color=' .$color. ">" .$day. '</td>');
  //曜日を進める
  $weekday++;
}
//最後の空欄作成
while( $weekday < 7 ){
  echo ('<td>&nbsp;</td>');
  $weekday++;
}
echo ('</tr>' . "\n");  // 最後の</tr>
?>
</table>
</body>
</html>