PHP:PHPで明日、昨日、来月、先月などの日付取得

PHP日付取得して処理をすることはよくあります。

現在の日付を取得するのはdate()関数を使用すればいいのですが、
明日」「昨日」「来月」「先月」などの日付を取得する場合は、
strtotime()関数やmktime()関数を使用します。

忘れてしまうことが多いので、下記にメモします。


PHPで日付取得(明日、昨日、来月、先月)

※出力結果は2014年5月9日の場合

今日の場合

date('Y-m-d');

「出力結果」

2014-05-09

明日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('+1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') + 1, date('Y')));

「出力結果」

2014-05-10

昨日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('-1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') - 1, date('Y')));

「出力結果」

2014-05-08

来月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('+1 month'));
date('Y-m', strtotime(date('Y-m-1') . '+1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') + 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') + 1, 1, date('Y')));

「出力結果」

2014-06

先月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('-1 month'));
date('Y-m', strtotime(date('Y-m-1') . '-1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') - 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') - 1, 1, date('Y')));

「出力結果」

2014-04

※来月と先月の月の取得を訂正しました。


strtotime()関数のフォーマット

下記にstrtotime()関数でよく使用するフォーマットをメモします。
※「+1」の数値は取得したい値に変更できます。

フォーマット 内容
now 現在のタイムスタンプを取得
today 今日のタイムスタンプを取得
tomorrow 明日のタイムスタンプを取得
yesterday 昨日のタイムスタンプを取得
+1 day 1日後のタイムスタンプを取得
+1 week 1週間後のタイムスタンプを取得
+1 month 1ヵ月後のタイムスタンプを取得
+1 year 1年後のタイムスタンプを取得
+1 hour 1時間後のタイムスタンプを取得
+1 minute 1分後のタイムスタンプを取得
+1 second 1秒後のタイムスタンプを取得

上記以外にも色々な使い方があります。
フォーマットは複数組み合わせることも可能です。


php:phpで時間帯によって表示内容を変更する

WEBサイトを作成していると時間帯によって表示の仕方を変えたい場合があります。

phpでは時間を指定して、朝と夜でサイトのイメージを変えたり、
表示している文言を変更したりすることが可能です。
※サーバ内の時間を参照しているので、そこは注意が必要です。


phpで時間を指定して表示内容を変える

下記は6時~18時、18時~6時で表示する内容を
変更して出力する場合です。

date()関数で現在の時間のみを取得します。
date(‘H’)で取得すると00~23の値を取得するので、
intval()関数で整数の値を取得しています。

// 現在の時間を取得する
$time = intval(date('H'));

if文で時間帯によって処理を分岐します。

// 6時~18時の時間帯の処理
if (6 <= $time && $time <= 17) {
	echo '6時~18時までの処理';
}
// それ以外(18時~6時まで)の時間帯の処理
else {
	echo '18時~6時までの処理';
}

また、時間帯を細かく設定したい場合、elseifで時間帯を追加すれば
上記以外の時間帯でも表示したい内容を切り替えることができます。


時間の他にも、現在の月などを取得すれば季節ごとに処理を変更することも可能です。

Javascript:Javascriptで現在の日付を取得する

Javascript現在日付を取得する場合は、Dateオブジェクトを使用します。
日付や時間の取得はよく使うので、メモします。


Dateオブジェクト

現在の日時または指定した日時の日付オブジェクトを生成します。

now = new Date();

現在の日付を取得する

下記のように、生成したDateオブジェクトから
一つ一つの値を取得していきます。

	// Dateオブジェクトを生成
	now = new Date();

	// 年を取得
	//y = now.getYear();
	y = now.getFullYear();

	// 月を取得
	m = now.getMonth() + 1;

	// 日を取得
	d = now.getDate();

	// 時を取得
	h = now.getHours();

	// 分を取得
	i = now.getMinutes();

	// 秒を取得
	s = now.getSeconds();

	alert(y + '年' + m + '月' + d + '日 ' + h + '時' + i + '分' + s + '秒');

年の取得はgetYear()かgetFullYear()を使用します。
getYear()で取得した場合は、ブラウザやバージョンによって
2013を取得する場合と113を取得する場合に分かれるそうです。
なので3桁で取得した場合は1900をプラスして使用する必要があります。

	// 年を取得
	y = now.getYear();

	if ( y < 1900 ) {
		y = y + 1900;
	}

今であればgetFullYear()を使用したほうがいいと思います。
昔は使えなかったみたいですが。


月の取得は0~11の値が取得されるので、
下記のように1プラスしています。

	// 月を取得
	m = now.getMonth() + 1;

php:phpのdate関数で日付のフォーマット変更

phpで日付文字列の形式(フォーマット)を変換する場合のメモです。date関数を使用し変換します。
いつも忘れてしまうので。
データベースからdatetime型の値を取得した時に時間を表示せず年月日だけ表示したい場合などがあります。
下記の方法で指定の形式に日付・日時を変更できます。


【PHP】

$date = '2013-01-01 00:00:00';
echo date('Y/m/d', strtotime($date));

【出力結果】

2013/01/01

【PHP】

$date = '2013-01-01 00:00:00';
echo date('Y年n月j日', strtotime($date));

【出力結果】

2013年1月1日

strtotime()でUnixタイムスタンプを取得し、date()で日付のフォーマットを変更します。


date()関数のフォーマット

下記にdate()関数でよく使用するフォーマットをメモします。

※下記以外にもフォーマットはあります。

フォーマット 内容
Y 4桁の年。例:2014
y 2桁の年。例:14
L 閏年。1:閏年 0:閏年ではない

フォーマット 内容
m ゼロ詰めの月。01~12
n ゼロなしの月。1~12
F フルスペルの月。例:January
M 3文字形式の月。例:Jan
t 月の日数。28~31

フォーマット 内容
d ゼロ詰めの日。01~31
j ゼロなしの日。1~31
z 年間の通算日。0~365

フォーマット 内容
g 12時間単位の時(ゼロなし)。1~12
G 24時間単位の時(ゼロなし)。0~23
h 12時間単位の時。01~12
H 24時間単位の時。00~23

フォーマット 内容
i 分。00~59

フォーマット 内容
s 秒。00~59

午前・午後

フォーマット 内容
a 午前:am 午後:pm
A 午前:AM 午後:PM

曜日

フォーマット 内容
D 3文字形式の曜日。例:Mon
l フルスペルの曜日。例:Monday
N ISO-8601形式の曜日。1(月)~7(日)
w 曜日。0(日)~6(土)