Web Artisan Blog - ウェブ アルチザン ブログ

PHP:日付の計算(昨日とか明日とか何日前何日後とかを求める)

PHP (55 items)

2005年01月17日

VBやASPだったら、
DateAdd関数という便利な関数を使って日付の計算が出来ます。
>DateAdd関数

VBやASPには、
Date型という便利なデータ型があるのでこのような事が出来ますが、
PHPには日付型のデータ型はありません。
よって、ロジックで計算しないといけない訳ですが、
そんなに難しくはないのです。
計算には、下記関数を使います。
>mktime
>date

<例(昨日の算出)>

$date_today = mktime (0, 0, 0, date("m"), date("d"),  date("y"));・・(1)
$date_yesterday = $date_today - 86400;・・(2)
echo date('y-m-d', $date_yesterday);・・(3)



・・(1)
まず、mktime関数で現在の日付を取得します。

ここで、mktime関数の引数にdate関数を渡していますが、
date関数の戻り値がstringに対し、mktime関数の引数はint型です。
型を合わさなければ?と思いがちですが、PHPでは明示的型変換を必要としません。
<関連記事>
>PHPでは変数宣言時のデータ型宣言は必要ないですよ

この関数の戻り値はint(整数)型で返ってきます。
単位は「秒」です。
これベースでこの後の処理を行えば良い訳で、
日付の計算は、整数の足し引きで求めるのです。

・・(2)
(1)で求めた整数型の今日から”1日”を引いて昨日を求めます。
”86400”というのは、1日を秒で表した値ですね。
ちなみに、明日を求めるなら”86400”を足せば良い。

$date = $date_today + 86400;


3日前は、

$date = $date_today - 86400 *3 


3日後は、

$date = $date_today + 86400 *3 


と、”86400”に日数を掛ければいいのです。

・・(3)
で、求めた結果をdate関数でフォーマット変換して出力します。

<出力結果>

2005-01-16



ちなみに、今日が”2005年2月1日”であれば、

2005-01-31


と、ちゃんと日付で計算してくれます。
月がまたがっても問題ありません。

前の記事 次の記事

Comments

浮雲 wrote:

PHP+Postgresでの日付計算で悩んでます。
テーブルに日付があって、その日付の1月後の日付が必要です。
どこにでもありそうな処理だと思うのですが大の月、小の月、閏年などを考えるとなかなかうまくいきません。すっきりしたスクリプト、又はSQLがあったらご教示願います。 
環境は以下です。
PHP PHP Version 4.3.9
PostgreSQL  7.4
2006年06月12日 17時23分08秒

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=405