PHPのdate関数では、日時の型を変換することができます。そこで今回は、date関数で日時をフォーマットを指定する方法を紹介していきます。
また、strtotime関数とDateTimeクラスで日時をフォーマットする方法と、注意点についても解説していますよ。
目次
PHPのdate関数で日時の型を変換する方法
PHPで使われるdate関数とは、日付や時刻を書式化する関数です。日時を利用した処理で頻繁に使われています。
date関数で出力される日時の型は、フォーマット文字を使って指定します。そこで、date関数で使えるフォーマットの方法と使い方を紹介していきます。
まず、date関数で日時のフォーマットをする場合、次の形式で書く必要があります。
1 |
date(フォーマット文字 [, タイムスタンプ(省略可)]); |
第一引数には、フォーマット文字を使って、日付の型を指定します。
第二引数には、Unixタイムスタンプを指定します。タイムスタンプを指定しなかった場合には、現在時刻が取得されます。
date関数で指定できるフォーマット文字は次の通りです。
日時 | フォーマット 文字 |
説明 | 例 |
---|---|---|---|
年 | Y | 西暦(4桁) | 2020 |
y | 西暦(2桁) | 20 | |
月 | m | 月(2桁) | 06 |
n | 月(先頭の0は省略) | 6 | |
M | 英語(略語) | jun | |
F | 英語 | june | |
日 | d | 日(2桁) | 08 |
j | 日(先頭の0は省略) | 8 | |
曜日 | D | 英語(略語) | wed |
l | 英語 | Wednesday | |
w | 数字(日曜が0) | 5 | |
その他 (日付関連) |
L | うるう年の確認 (うるう年:1,うるう年以外:0) |
0 |
t | 対象月の日数 | 31 | |
z | 対象年の経過日数 | 155 | |
W | その年の経過週 (月曜開始) |
11 | |
時間 | H | 24時間単位 | 08 |
G | 24時間単位(先頭の0は省略) | 8 | |
h | 12時間単位 | 08 | |
g | 12時間単位(先頭の0は省略) | 8 | |
a | 午前・午後(小文字) | am | |
A | 午前・午後(大文字) | AM | |
分 | i | 分 | 06 |
秒 | s | 秒 | 08 |
date関数の返り値は、指定した型に書式化された文字列です。
それでは、実際にdate関数を使って、フォーマットしてみましょう。
日付と時間をフォーマットする
PHPのdate関数を使用して、実際に日付と時間のフォーマットをしていきます。まずは、各値が何を示すのか、わかりやすいようにフォーマットしてみます。
1 |
echo date('Y年m月d日 H時i分s秒'); |
各値が何を示しているのかわかりやすいですね。
次に、日付を「/(スラッシュ)」、時間を「:(コロン)」区切りでフォーマットしてみます。
1 |
echo date('Y/m/d H:i:s'); |
こちらも各値が何を示しているのか、何となくわかりやすいですね。ポイントは、日付は「/」、時間は「:」を使い、馴染みのある表示形式にした点です。「/」と「:」が逆だと、各値が何を示しているのか、わかりにくくなってしまいます。
最後に、各値を区切らずに出力してみます。
1 |
echo date('YmdHis'); |
一見、ただの数字の羅列にしか見えませんね。ユーザーに日時を案内する際の出力として使うのはやめた方が良いでしょう。
しかし、システム内で一意な文字列を取得する場合などには、わかりやすい数字です。ポイントは、出力される文字列の桁数が常に同じになるようにする点です。日付や時間によって、桁数が左右しないフォーマット文字を使用します。
PHPのstrtotime関数で日時を指定して型を変換する方法
現在の日時ではなく、指定の日時をフォーマットしたい場合、date関数の第二引数にstrtotime関数を使います。date関数の第二引数には、整数型のUnixタイムスタンプしか指定できないためです。
date関数を使って指定日時をフォーマットする場合、次のように記述します。
1 2 |
$date = '2020-01-01'; echo date('Y/m/d H:i:s', strtotime($date)); |
変数「$date」に指定日時を格納し、date関数の第二引数にします。しかし、この型のままでは受け付けてもらえないので、strtotime関数でUnixタイムスタンプに変換します。
strtotime関数は2038年問題に注意が必要
strtotime関数とは、英文形式の日時をUnixタイムスタンプに変換する関数です。日付の計算でよく利用されている関数です。
しかし、strtotime関数を使う場合、2038年問題に注意する必要があります。2038年問題とは、、一部の環境では2038年1月19日3時14分8秒を過ぎると、システムが正しい日時を認識できなくなってしまう問題のことです。これは、コンピューターが認識できる桁数を超えるために起こるシステム障害です。strtotime関数を利用する際には、注意しましょう。
PHPのDateTimeクラスで日時の型を変換する方法
PHPでは、DateTimeクラスを使用して日時の型を変換することもできます。
DateTimeクラスとは、日時をオブジェクトとして扱うPHPのクラスのことです。DateTimeクラスでは、formatメソッドを使って日時の型を変換します。
1 2 |
$date = new DateTime(); echo $date->format('Y/m/d H:i:s'); |
日時を指定してフォーマットしたい場合には、次のように記載します。
1 2 |
$date = new DateTime('2020-01-01'); echo $date->format('Y/m/d H:i:s'); |
strtotime関数の注意点として解説した2038年問題ですが、DateTimeクラスであれば、問題なく動作します。そのため、日付の計算はDateTimeクラスを使用するのがおすすめです。
PHPで出力される曜日を日本語変換する
PHPで出力される曜日表示には、日本語表記が用意されていません。そのため、日本語表示を行いたい場合には、置換する処理を追加する必要があります。
date関数のフォーマット文字「w」を指定すると、曜日を数字で取得できます。日曜日が「0」、月曜日が「1」と曜日が進むたびにインクリメントされ、土曜日の「6」が最大値です。
これを応用して曜日を日本語表記に変換するのが最も簡単なやり方でしょう。サンプルコードを紹介します。
1 2 3 |
$week = array('日', '月', '火', '水', '木', '金', '土'); $w = date('w'); echo $week[$w]; |
DateTimeクラスを使用する際にも、同様の処理で日本語変換することができます。
1 2 3 4 |
$week = array('日', '月', '火', '水', '木', '金', '土'); $date = new DateTime(); $w = $date->format('w'); echo $week[$w]; |
他にも、PHPが用意しているフォーマット以外の出力をしたい場合には、工夫して理想の型に変換するようにしましょう。
まとめ
PHPのdate関数では、簡単に日時の型を変換できます。用意されているフォーマット文字を上手く使って、わかりやすく出力しましょう。
なお、date関数で利用されるstrtotime関数には、「2038年問題」という懸念点があります。日付の計算を目的として利用するのであれば、DateTimeクラスの利用がおすすめです。