PHP アドバンス

PHP の日付と時刻

1. PHP 日付と時刻関数の概要

PHP には、日付と時刻を処理するための多くの組み込み関数が用意されています。

中心となる主要な関数は以下の通りです:

  • date() - ローカルの日付や時刻をフォーマットします。
  • mktime() - 日付に対応する Unix タイムスタンプを返します。
  • strtotime() - 英文形式の日時文字列を Unix タイムスタンプに変換します。
  • time() - 現在の時刻を Unix タイムスタンプとして返します。
  • date_default_timezone_set() - 使用されるデフォルトのタイムゾーンを設定します。
  • date_default_timezone_get() - 設定されているデフォルトのタイムゾーンを取得します。

2. PHP date() 関数

date() 関数は、ローカルの日付や時刻を、より読みやすい形式にフォーマットするために使用されます。

2.1 シンタックス

date(format, timestamp)

パラメータ説明
format必須。タイムスタンプのフォーマットを指定します。
timestamp任意。Unix タイムスタンプを指定します。デフォルトは現在のローカル日時です。

3. date() 関数の使い方

date() 関数の必須パラメータである format は、日付(または時刻)をどのようにフォーマットするかを指定します。

日付でよく使われる主な文字は以下の通りです:

  • d - 月の日(01 から 31)を表します。
  • j - 月の日(1 から 31)を表します。
  • m - 月(01 から 12)を表します。
  • Y - 年(4桁)を表します。
  • l(小文字の L) - 曜日を表します。
  • F - 月の名前を表します。

また、/.- などの文字をフォーマットパラメータの間に挿入して、追加のスタイリングを行うこともできます。

以下の例では、ローカルの日付を5つの異なる方法でフォーマットしています。

コード例:

<?php
echo "今日は " . date("Y/m/d") . "<br>";
echo "今日は " . date("Y.m.d") . "<br>";
echo "今日は " . date("Y-m-d") . "<br>";
echo "今日は " . date("l") . "<br>";
echo date('l, F j, Y');
?>

4. PHP Tips - 著作権年の自動更新

date() 関数を使用して、ウェブサイトの著作権年(Copyright Year)を自動的に更新することができます。

実装例:

© 2010-<?php echo date("Y");?>

5. 時刻の表示

date() 関数は、ローカル時刻を読みやすい形式にフォーマットするためにも使用されます。

時刻でよく使われる主な文字は以下の通りです:

  • H - 24時間単位の時(00 から 23)
  • h - 先頭に 0 を付けた12時間単位の時(01 から 12)
  • i - 先頭に 0 を付けた分(00 から 59)
  • s - 先頭に 0 を付けた秒(00 から 59)
  • a - 小文字の am または pm

以下の例では、現在の時刻を2つの異なる形式で出力します。

コード例:

<?php
echo "現在の時刻は " . date("H:i:s") . "<br>";
echo "現在の時刻は " . date("h:i:s a");
?>

6. PHP date_default_timezone_set() 関数

date() 関数は サーバーの現在のローカル日時 を返すことに注意してください。

特定の場所に応じた正しい日付と時刻を取得するには、date_default_timezone_set() 関数を使用して、使用したいタイムゾーンを設定する必要があります。

以下の例では、タイムゾーンを "America/New_York" に設定し、指定した形式で現在の日時を出力します。

コード例:

<?php
date_default_timezone_set("America/New_York");
echo "現在の日時(ニューヨーク): " . date("Y-m-d H:i:s");
?>

7. PHP date_default_timezone_get() 関数

スクリプト内のすべての日付・時刻関数で使用されているデフォルトのタイムゾーンを返すには、date_default_timezone_get() 関数を使用します。

コード例:

<?php
echo date_default_timezone_get();
?>

8. PHP mktime() 関数

date() 関数の任意パラメータである timestamp には、タイムスタンプを指定できます。省略した場合は、上記の例のように現在のシステム日時が使用されます。

mktime() 関数は、特定の日付に対応する Unix タイムスタンプを返します。Unix タイムスタンプとは、Unix エポック(1970年1月1日 00:00:00 GMT)から指定された時刻までの経過秒数です。

8.1 シンタックス

mktime(hour, minute, second, month, day, year)

以下の例では、特定の日付の Unix タイムスタンプを取得し、その日の曜日を確認しています。

コード例:

<?php
// 使用するデフォルトタイムゾーンを設定
date_default_timezone_set("UTC");
$d = mktime(0, 0, 0, 10, 3, 1975);
echo "1975年10月3日は " . date("l", $d) . " でした。";
?>

9. PHP time() 関数

time() 関数は、現在の時刻を Unix タイムスタンプとして返します。これは Unix エポック(1970年1月1日 00:00:00 GMT)からの秒数です。

コード例:

<?php
echo "現在: " . time();
?>

取得したタイムスタンプを読みやすい形式にフォーマットする例です:

コード例:

<?php
// 現在の Unix タイムスタンプを取得
$ts = time();
// タイムスタンプをフォーマット
$curDate = date('Y-m-d H:i:s', $ts); 
echo $curDate;
?>

10. PHP strtotime() 関数

strtotime() 関数は、英文形式の日時文字列を Unix タイムスタンプに変換します。

10.1 シンタックス

strtotime(datetime_string, basetimestamp)

strtotime() 関数は文字列の変換において非常に柔軟(Clever)であり、さまざまな値を入力することができます。

コード例:

<?php
$d = strtotime("10:30pm November 15 2025");
echo "日時は " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("now");
echo "現在: " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("+5 days");
echo "5日後: " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("+2 weeks 4 days 2 hours 20 seconds");
echo "2週間と4日、2時間20秒後: " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("last Sunday");
echo "先週の日曜日: " . date("Y-m-d H:i:s", $d);
?>

       ヒント:strtotime() は完璧ではないため、入力する文字列の形式は必ず事前に検証するようにしてください。

11. その他の日付の実装例

以下の例では、今後6週間の「土曜日」の日付を繰り返し出力します。

コード例:

<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks", $startdate);

while ($startdate < $enddate) {
  echo date("M d", $startdate) . "<br>";
  $startdate = strtotime("+1 week", $startdate);
}
?>