date: ローカルの日付/時刻を書式化する (日付・時刻 関数) - PHPプロ!マニュアル

PHPマニュアル

date: ローカルの日付/時刻を書式化する

date

(PHP 4, PHP 5)

dateローカルの日付/時刻を書式化する

説明

string date ( string $format [, int $timestamp ] )

指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。 つまり timestamp はオプションであり そのデフォルト値は time() の値です。

パラメータ

format

出力される日付文字列の書式。以下のオプションを参照ください。 定義済みの定数 も用意されており、たとえば DATE_RSS はフォーマット文字列 'D, d M Y H:i:s' と同じ意味になります。

以下の文字が format パラメータ文字列として認識されます
format 文字 説明 戻り値の例
--- ---
d 日。二桁の数字(先頭にゼロがつく場合も) 01 から 31
D 曜日。3文字のテキスト形式。 Mon から Sun
j 日。先頭にゼロをつけない。 1 から 31
l (小文字の 'L') 曜日。フルスペル形式。 Sunday から Saturday
N ISO-8601 形式の、曜日の数値表現 (PHP 5.1.0 で追加)。 1(月曜日)から 7(日曜日)
S 英語形式の序数を表すサフィックス。2 文字。 st, nd, rd または thjと一緒に使用する ことができる。
w 曜日。数値。 0 (日曜)から 6 (土曜)
z 年間の通算日。数字。(ゼロから開始) 0 から 365
--- ---
W ISO-8601 月曜日に始まる年単位の週番号 (PHP 4.1.0 で追加) 例: 42 (年の第 42 週目)
--- ---
F 月。フルスペルの文字。 January から December
m 月。数字。先頭にゼロをつける。 01 から 12
M 月。3 文字形式。 Jan から Dec
n 月。数字。先頭にゼロをつけない。 1 から 12
t 指定した月の日数。 28 から 31
--- ---
L 閏年であるかどうか。 1なら閏年。0なら閏年ではない。
o ISO-8601 形式の年。これは Y ほぼ同じだが、ISO 週番号 (W)が前年あるいは翌年に属する場合がある点で 異なる(PHP 5.1.0 で追加)。 例: 1999 あるいは 2003
Y 年。4 桁の数字。 例: 1999または2003
y 年。2 桁の数字。 例: 99 または 03
--- ---
a 午前または午後(小文字) am または pm
A 午前または午後(大文字) AM または PM
B Swatch インターネット時間 000 から 999
g 時。12時間単位。先頭にゼロを付けない。 1 から 12
G 時。24時間単位。先頭にゼロを付けない。 0 から 23
h 時。数字。12 時間単位。 01 から 12
H 時。数字。24 時間単位。 00 から 23
i 分。先頭にゼロをつける。 00 から 59
s 秒。先頭にゼロをつける。 00 から 59
u マイクロ秒 (PHP 5.2.2 で追加)。 例: 654321
タイムゾーン --- ---
e タイムゾーン識別子(PHP 5.1.0 で追加) 例: UTC, GMT, Atlantic/Azores
I (大文字の i) サマータイム中か否か 1ならサマータイム中。 0ならそうではない。
O グリニッジ標準時 (GMT) との時差 例: +0200
P グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 (PHP 5.1.3 で追加)。 例: +02:00
T タイムゾーンの略称 例: EST, MDT ...
Z タイムゾーンのオフセット秒数。 UTC の西側のタイムゾーン用のオフセットは常に負です。そして、 UTC の東側のオフセットは常に正です。 -43200 から 50400
全ての日付/時刻 --- ---
c ISO 8601 日付 (PHP 5 で追加されました) 2004-02-12T15:19:21+00:00
r » RFC 2822 フォーマットされた日付 例: Thu, 21 Dec 2000 16:01:07 +0200
U Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数 time() も参照

フォーマット文字列中の認識されない文字は、そのまま表示されます。 Z 形式は、 gmdate() で使用した場合、常に 0 を返します。

注意:

この関数が受け付けるのは integer のタイムスタンプだけです。したがって、書式指定文字 u が有用となるのは date_create() で作成したタイムスタンプを用いて date_format() を使用した場合のみです。

timestamp

オプションのパラメータ timestamp は、 integer 型の Unix タイムスタンプです。 timestamp が指定されなかった場合のデフォルト値は、 現在の時刻です。言い換えると、デフォルトは time() の返り値となります。

返り値

日付を表す文字列を返します。 timestamp に数字以外が使用された場合は FALSE が返され、E_WARNING レベルのエラーが発生します。

エラー / 例外

すべての日付/時刻関数は、 有効なタイムゾーンが設定されていない場合に E_NOTICE を発生させます。また、システム設定のタイムゾーンあるいは環境変数 TZ を使用した場合には E_STRICT あるいは E_WARNING を発生させます。 date_default_timezone_set() も参照ください。

変更履歴

バージョン 説明
5.1.0 有効なタイムスタンプの範囲は、通常 Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです (これらの日付は、32 ビット符号付き整数の最小および最大値に 対応します)。 しかし、PHP 5.1 より前のバージョンでは、システム環境によっては (例: Windows) この範囲が 1970 年 1 月 1 日から 2038 年 1 月 19 日 までに制限されます。
5.1.0

タイムゾーンがおかしい場合に E_STRICTE_NOTICE が発生するようになりました。

5.1.1 PHP 5.1.1 以降、format パラメータで標準的な 日付/時刻フォーマットを指定する際に有用な 定数がいくつか追加されました。

例1 date() の例

<?php
// 使用するデフォルトのタイムゾーンを指定します。PHP 5.1 以降で使用可能です。
date_default_timezone_set('UTC');


// 結果は、たとえば Monday のようになります。
echo date("l");

// 結果は、たとえば Monday 8th of August 2005 03:12:46 PM のようになります。
echo date('l jS \of F Y h:i:s A');

// 結果は July 1, 2000 is on a Saturday となります。
echo "July 1, 2000 is on a " date("l"mktime(000712000));

/* 書式指定パラメータに、定数を使用します。 */
// 結果は、たとえば Mon, 15 Aug 2005 15:12:46 UTC のようになります。
echo date(DATE_RFC822);

// 結果は、たとえば 2000-07-01T00:00:00+00:00 のようになります。
echo date(DATE_ATOMmktime(000712000));
?>

前にバックスラッシュを付けてエスケープすることにより、 フォーマット文字列として認識される文字が展開されることを防止することができます。 バックスラッシュ付きの文字は既に特別なシーケンスであり、 バックスラッシュもエスケープすることが必要となる可能性があります。

例2 date() の文字をエスケープする

<?php
// Wednesday the 15th のように出力
echo date("l \\t\h\e jS");
?>

date()mktime() の両方を用いて、未来または過去の日付を知ることができます。

例3 date()mktime() の例

<?php
$tomorrow  
mktime(000date("m")  , date("d")+1date("Y"));
$lastmonth mktime(000date("m")-1date("d"),   date("Y"));
$nextyear  mktime(000date("m"),   date("d"),   date("Y")+1);
?>

注意:

サマータイムがあるため、日付や月の秒数を単純にタイムスタンプに 可減算するよりもより信頼性があります。

date() フォーマットのいくつかの例を示します。 現在の実装で特別な意味がある文字や今後の PHP のバージョンで意味が 割り付けられるであろう文字については、望ましくない結果を避けるために エスケープする必要があることに注意してください。エスケープを する際には、改行文字 \n のような文字を回避するために シングルクォートを使用してください。

例4 date() のフォーマット指定

<?php
// 今日は March 10th, 2001, 5:16:18 pm であり、
// またタイムゾーンは Mountain Standard Time (MST) であるものとします

$today date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today date("m.d.y");                         // 03.10.01
$today date("j, n, Y");                       // 10, 3, 2001
$today date("Ymd");                           // 20010310
$today date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today date("H:i:s");                         // 17:16:18
?>

他の言語で日付をフォーマットするためには、date() のかわりに setlocale() および strftime() 関数を使用する必要があります。

注意

注意:

日付の文字列表現からタイムスタンプを生成するには、 strtotime() が使用できるでしょう。 さらに、いくつかのデータベースは(MySQL の » UNIX_TIMESTAMP 関数の ような)日付フォーマットからタイムスタンプへの変換関数を有しています。

ヒント

PHP 5.1 以降、$_SERVER['REQUEST_TIME'] によってリクエスト開始時のタイムスタンプが取得できるようになりました。

参考

  • gmdate() - GMT/UTC の日付/時刻を書式化する
  • idate() - ローカルな時刻/日付を整数として整形する
  • getdate() - 日付/時刻情報を取得する
  • getlastmod() - 最終更新時刻を取得する
  • mktime() - 日付を Unix のタイムスタンプとして取得する
  • strftime() - ロケールの設定に基づいてローカルな日付・時間をフォーマットする
  • time() - 現在の Unix タイムスタンプを返す
  • 定義済みの定数


PHPマニュアル



Pick Up Q&A

Q
掲示板サイトを作成するときの、コメントしたユーザーのID取得方法
 このエントリーをはてなブックマークに追加 
A
2chがどのようなハッシュ形式を使っているかは知りませんが、 概ねIPアドレスをcryptやmd5などでハッシュ値にして一部分を取り出しているものだと思います。 単純にハッシュ関数を使うだけだとIPがバレてしまう...

>>続きを読む

alice4work様 shimix様 ご回答ありがとうございます。掲示板サイトを作る上で重要なトピックです。IPアドレスの解読を防ぐためにソルトを付加する点がポイントですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)