My Photo

« U-23 ロンドン五輪出場決定 #daihyo | Main | PHPメモ024:日付・時刻関連の関数 その2 »

March 15, 2012

PHPメモ023:日付・時刻関連の関数 その1

int time()
現在のUnixタイムスタンプ(1970年1月1日 00:00:00 GMT からの通算秒数を返す。

time() の戻り値はグリニッジ標準時であり日本時間に変換するには

time() + 9 * 60 * 60

のように9時間を足さなければならない。しかし、date() や strtotime() など日付・時刻関連の関数の多くはタイムゾーン情報を用いてローカルタイムに換算して処理を行うので、通常はこのような変換をする必要はない。

タイムゾーンは以下の優先順位で取得される。

  1. date_default_timezone_set() で設定したタイムゾーン。
  2. (PHP 5.4.0 以前)TZ環境変数。
  3. php.ini の date.timezone
  4. (PHP 5.4.0 以前)OSに問い合わせる

string date(<フォーマット>[, <Unixタイムスタンプ>])
指定されたUnixタイムスタンプからフォーマットに従って文字列を生成し返す。Unixタイムスタンプが省略された場合は現在の日時を使用する。

フォーマットに使用する文字は以下。

文字 説明
Y 年(4桁)
y 年(2桁)
L 閏年か(閏年なら1、閏年でないなら0)
m 月(01-12)
n 月(1-12、前ゼロなし)
M 月(3文字)
F 月(フルスペル)
t 指定したつきの日数
d
H 時(00-23)
h 時(01-12))
G 時(0-23、前ゼロなし)
g 時(1-12、前ゼロなし)
a am または pm(小文字)
A AM または PM(大文字)
i
s
D 曜日(3文字)
l 曜日(フルスペル)
w 曜日(数字、0-6)
e タイムゾーン識別子
T タイムゾーンの略称
O グリニッジ標準時との誤差
c ISO 8601 形式(XMLSchemaの型としいて規定されている形式)
r RFC 2822 形式

サンプルーコード
echo date('Y-m-d') . "\n";
echo date('Y/m/d H:i:s e') . "\n";
echo date('Y/m/d(D) h:i:s a O') . "\n";
echo date('D, d M Y H:i:s T') . "\n";
echo 'c(iso8601):' . date('c') . "\n";
echo 'r(rfc2822):' . date('r') . "\n";
サンプルコードの出力
2012-03-14
2012/03/14 14:27:31 Asia/Tokyo
2012/03/14(Wed) 02:27:31 pm +0900
Wed, 14 Mar 2012 14:27:31 JST
c(iso8601):2012-03-14T14:27:31+09:00
r(rfc2822):Wed, 14 Mar 2012 14:27:31 +0900

int strtotime(<文字列>[, <now>])
文字列の日付をUnixタイムスタンプに変換する。

第2引数はリファレンスを読んでもどういう意味なのか不明。下記の例にあるように、違う値を入れても同じ結果が返ってくる。

この関数の引数には 'yesterday' や '+1 month' など色々な表現が使える。
参考ページ:PHP :: イディオム / strtotime を使った相対的な日付 [Tipsというかメモ]

サンプルーコード
$now = time();
echo 'time() : ' . $now . ':' . date('Y/m/d H:i:s', $now) . "\n";
dateTest('2012-03-14');
dateTest('2012-03-14 10:00:00');
dateTest('yesterday');
dateTest('next Sunday');
dateTest('+1 month');
dateTest(date('Y-m-1').'+2 month');
echo "\n";

// 第2引数の値を変えても同じ値が帰ってくる。第2引数の意味は?
echo strtotime('2012-03-14', time()) . "\n";
echo strtotime('2012-03-14', time() - (24 * 60 * 60)) . "\n";
echo strtotime('2012-03-14', 0) . "\n";

function dateTest($str) {
	$t = strtotime($str);
	echo $str . ' : ' . $t . ' : ' . date('Y/m/d H:i:s', $t)   . "\n";
}
サンプルコードの出力
time() : 1331705389:2012/03/14 15:09:49
2012-03-14 : 1331650800 : 2012/03/14 00:00:00
2012-03-14 10:00:00 : 1331686800 : 2012/03/14 10:00:00
yesterday : 1331564400 : 2012/03/13 00:00:00
next Sunday : 1331996400 : 2012/03/18 00:00:00
+1 month : 1334383789 : 2012/04/14 15:09:49
2012-03-1+2 month : 1335798000 : 2012/05/01 00:00:00

1331650800
1331650800
1331650800

« U-23 ロンドン五輪出場決定 #daihyo | Main | PHPメモ024:日付・時刻関連の関数 その2 »

PHP」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/54226792

Listed below are links to weblogs that reference PHPメモ023:日付・時刻関連の関数 その1:

« U-23 ロンドン五輪出場決定 #daihyo | Main | PHPメモ024:日付・時刻関連の関数 その2 »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof