My Photo

« デュナミス-ボスディンクリア #FF11 | Main | 新潟開幕2連敗、磐田は今季初勝利 #jleague #albirex #jubilo »

March 17, 2012

PHPメモ025:カレンダー関連の関数

PHPではカレンダーとして主にグレゴリウス暦、ユリウス積算日(ユリウス日、ユリウス通日)、Unixタイムスタンプを使用する。
ユリウス積算日は紀元前4713年1月1日からの日数で、2日の日付の差を調べる際などには便利である。

int gregoriantojd(<月>, <日>, <年>)
グレゴリウス暦をユリウス積算日に変換する。

array cal_from_jd(<ユリウス積算日>, <カレンダー>)
ユリウス積算日を指定したカレンダーに変換する。第2引数は CAL_GREGORIAN がグレゴリウス暦。
戻り値はカレンダーの情報を含む配列。

サンプルーコード

$jd = gregoriantojd(5, 22, 2012);	// スカイツリー開業予定
echo $jd . "\n";
print_r(cal_from_jd($jd, CAL_GREGORIAN));
サンプルコードの出力
Array
(
    [date] => 5/22/2012
    [month] => 5
    [day] => 22
    [year] => 2012
    [dow] => 2
    [abbrevdayname] => Tue
    [dayname] => Tuesday
    [abbrevmonth] => May
    [monthname] => May
)

int unixtojd([<Unixタイムスタンプ>])
Unixタイムスタンプをユリウス積算日に変換する。引数が省略された場合は現在の日時を使用する。

int jdtounix(<ユリウス積算日>)
ユリウス積算日をUNIXタイムスタンプに変換する。

サンプルーコード
$ut = strtotime('2012/5/21'); // 金環日食
echo $ut . "\n";
$jd = unixtojd($ut);
echo $jd . "\n";
dispArray(cal_from_jd($jd, CAL_GREGORIAN));
$ut2 = jdtounix($jd);
echo $ut2 . "\n";
サンプルコードの出力
1337526000
2456069
[date]=>5/21/2012,[month]=>5,[day]=>21,[year]=>2012,[dow]=>1,[abbrevdayname]=>Mon,[dayname]=>Monday,[abbrevmonth]=>May,[monthname]=>May,
1337558400

最後のタイムスタンプの値は最初のUnixタイムスタンプの値よりちょうど9時間(60*60*9=32400秒)、日本時間とGMTの時差の分大きい。
これはユリウス積算日には時刻の情報がないので、3行目のUnixタイムスタンプからユリウス積算日への変換でローカル時間に関する情報が失われたため。

mixed jddayofweek(<ユリウス積算日>[, <モード>])
ユリウス積算日から曜日を返す。モードで返す値の形式を指定する。

モードに指定できる値は下表。

モード 説明
0 日曜日を0とする数値(デフォルト)
1 英語の曜日(フルスペル)
2 英語の曜日(3文字の省略形)

string jdmonthname(<ユリウス積算日>, <モード>)
ユリウス積算日から月の名前を返す。モードで返す値の形式を指定する。

モードに指定できる値は下表。

モード 説明
0 英語の月名(3文字の省略形)
1 英語の月名(フルスペル)

サンプルーコード
$jd = gregoriantojd(7, 27, 2012); // ロンドン五輪
echo jddayofweek($jd, 0) . "\n";
echo jddayofweek($jd, 1) . "\n";
echo jdmonthname($jd, 0) . "\n";
echo jdmonthname($jd, 1) . "\n";
サンプルコードの出力
5
Friday
Jul
July

int cal_days_in_month(<カレンダー>, <月>, <日>)
指定したカレンダーと月についてつきの日数を返す。第1引数は CAL_GREGORIAN がグレゴリウス暦。

bool checkDate(<月>, <日>, <年>)
指定した日付がグレゴリウス暦で妥当かを調べる。

サンプルーコード
echo cal_days_in_month(CAL_GREGORIAN, 2, 2012) . "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 2013) . "\n";
echo "\n";

echo (checkdate(2, 29, 2012) ? '有効' : '無効') . "\n";
echo (checkdate(2, 29, 2013) ? '有効' : '無効') . "\n";
サンプルコードの出力
29
28

有効
無効

« デュナミス-ボスディンクリア #FF11 | Main | 新潟開幕2連敗、磐田は今季初勝利 #jleague #albirex #jubilo »

PHP」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

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

Listed below are links to weblogs that reference PHPメモ025:カレンダー関連の関数:

« デュナミス-ボスディンクリア #FF11 | Main | 新潟開幕2連敗、磐田は今季初勝利 #jleague #albirex #jubilo »

April 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            
無料ブログはココログ

日本blog村

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

好きな音楽家

メモ

XI-Prof