現役PHPプログラマが伝授!date関数で日時を自由に扱おう

様々なWebサイトを見ていると

2018/08/01
2018-08-01
2018年08月01日

といった様々な日付の表示方法がりますがみなさんこれらのフォーマットで表示する方法を知っていますか?

PHPでは日付を取得したり、取得した日付の書式を設定するdate関数があります。

この記事では、

・date関数とは
・date関数の基本的な使い方
・strtotime関数の基本的な使い方

という基本的な内容から、

・タイムゾーンの指定方法
・日付を比較する方法
・曜日を取得する方法

などの応用的な使い方に関しても解説していきます。

今回はそんなdate関数のさまざまな使い方について、わかりやすく解説します!

date関数を使用すれば、さまざな日付操作や日付の比較を行うことができます。

この機会にぜひマスターしておきましょう!

date関数とは

date関数は、引数に指定されたフォーマットを元に、日付文字列を返す関数です。

書式:

string date ( string $フォーマット [, int $タイムスタンプ = time() ] )

引数:
第一引数のフォーマットには、出力される日付文字列の書式を指定します。
第二引数のタイムスタンプには、int型のUnixタイムスタンプを指定します。
(タイムスタンプを指定しなかった場合は、現在の時刻がデフォルトで設定されます。)

Unixタイムスタンプとは:
協定世界時(UTC)で1970年1月1日(午前0時0分0秒)の時刻からの経過秒数を表すものです。

日時を経過秒数で表すことで、日時同士を比較するときなどによく使われます。

例えば、後述するstrtotime関数を使用すれば、指定した日時からの経過秒数を「1503308146」のような秒数に変換した値で取得できます。

返り値:
返り値は日付を表す文字列を返します。
タイムスタンプに数字以外が渡された場合はFALSEが返され、エラーとなります。

指定できるフォーマット文字(主に生年月日時分秒):

フォーマット説明
Y年(西暦の4桁)2017
y年(西暦の2桁)17
M月(2桁の月)08
n月(1桁で先頭に0を付けいない)8
d日(2桁の日付)21
H時間(2桁の24時間単位)16
h時間(2桁の12時間単位)08
i分(2桁の分)20
s秒(2桁の秒)30
t指定した月の日数(28~31)31
w曜日(0:日 ~ 6:土)2(火)

date関数で日付を取得する

ここでは、実際にdate関数の基本的な使い方を紹介します。

以下のプログラムではdate関数にフォーマット文字を指定して日付を取得しています。

// 'Y/m/d'
$date1 = date('Y/m/d');

// 'Y-m-d H:i:s'
$date2 = date('Y-m-d H:i:s');

// 'Y年m月d日 H時i分s秒'
$date3 = date('Y年m月d日 H時i分s秒');

// 'Y/m/d'曜日
$w = date('w');
$week = ['日', '月', '火', '水', '木', '金', '土'];
$date4 = date('Y/m/d').$week[$w];

// 時刻を出力
echo $date1.'<br>';
echo $date2.'<br>';
echo $date3.'<br>';
echo $date4;

実行結果:

2017/08/21
2017-08-21 09:22:37
2017年08月21日 09時22分37秒
2017/08/21月

サンプルプログラムのように、PHPがサポートしているYmdなどの書式を指定すれば、簡単にフォーマットされた日付文字列を取得することができます。

date関数の基本的な使いかたについては、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!

また、日付をフォーマットする方法については以下の記事でも詳しく解説しています!

strtotime関数で日付からタイムスタンプを取得する

指定した英文形式の日付をUnixタイムスタンプに変換するには、strtotime関数を使用します。

書式:

int strtotime ( string $日付/日時文字列 [, int $now = time() ] )

引数:
・第一引数にはUnixタイムスタンプを取得するための日時を文字列で指定します。
・第二引数には返される値を計算するために使用するタイムスタンプを指定できます。

返り値:
・int型で時刻を変換したUnixタイムスタンプを返します。

以下にstrtotime関数の簡単なサンプルを紹介します。

$time1 = strtotime('now'); //現在のタイムスタンプ
$time2 = date("Y-m-d H:i:s", strtotime('-10 day')); //10日前の日付
$time3 = date("Y-m-d H:i:s", strtotime('+1 week')); //一週間後の日付
$time4 = date("Y-m-d H:i:s", strtotime("next Thursday")); //次の木曜日

echo $time1.'<br>';
echo $time2.'<br>';
echo $time3.'<br>';
echo $time4;

実行結果:

1503308146
2017-08-11 09:35:46
2017-08-28 09:35:46
2017-08-24 00:00:00

strtotime関数はサンプルプログラムのように-10 dayで10日前を指定したり、next Thursdayで次の木曜日を指定するなんてことも可能です。

strtotime関数の基本的な使いかたについては、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!

タイムゾーンの指定

タイムゾーンとは、同じ標準時刻を使用する地域や区分のことを指します。

タイムゾーンは地域ごとに異なります。

インターネットに接続されているコンピューターがぞれぞれ、異なるタイムゾーンを指定していると、システムで時刻を管理している場合は、システムや通信に大きな影響を及ぼしてしまいます。

そのため、システムで管理している時刻に関しては、タイムゾーンを合わせる必要があります。

タイムゾーンはPHPの設定ファイルであるphp.iniで指定できるほか、date_default_timezone_set関数で指定することもできます。

date_default_timezone_setでタイムゾーンを指定

// 日本
date_default_timezone_set('Asia/Tokyo');
echo date("Y/m/d G:i:s").'<br>';

// アメリカ
date_default_timezone_set('America/Adak');
echo date("Y/m/d G:i:s");

タイムゾーンの設定方法については、以下の記事でも詳しく解説しています!

日付同士を比較する

プログラムにおいて、特定の日付になったら処理を行ったり、日付順にデータを並べ替えたりするときには、日付を比較する必要があります。

日付の比較はstrtotime関数を使用して、Unixタイムスタンプに変換して比較を行う方法や、DateTime関数を使用する方法があります。

以下に日付を比較する簡単なサンプルを記述します。

$date1 = new DateTime('2017-08-20');
$date2 = new DateTime('2017-08-15');

if ($date1 == $date2){
  echo "同じ日付です";
} else if ($date1 > $date2){
  echo "date1が未来です";
} else {
  echo "date2が未来です";
}

実行結果:

date1が未来です

そんな日付を比較する処理の詳細については、以下の記事でも詳しく解説しています!

曜日を取得する

曜日を取得するには、date関数の引数に’w’を指定します。

date(‘w’);

’w’を指定すると、曜日は以下の対応した曜日の番号が返されます。

日:0  月:1  火:2  水:3  木:4  金:5  土:6

以下に曜日を取得する簡単なサンプルを記述します。

//配列を使用し、要素順に(日:0〜土:6)を設定する
$week = [
  '日', //0
  '月', //1
  '火', //2
  '水', //3
  '木', //4
  '金', //5
  '土', //6
];

$date = date('w');

//曜日を出力
echo $week[$date] . '曜日';

実行結果:

月曜日

date関数で曜日を取得する方法や、数値で取得した曜日を月〜日のように日本語で取得する方法などについての詳細は、以下の記事で詳しく解説しています!

まとめ

ここでは、

・date関数で指定したフォーマットから日付を取得する方法
・strtotime関数を使用して指定した日付からタイムスタンプを取得する方法
・タイムゾーンを指定する方法
・日付同士を比較する方法
・日付から曜日を取得する方法

などについて解説しました。

PHPでは日付を処理するさまざまな機能が用意されていますので、ぜひ覚えておきましょう。

もし、date関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説