PHP:日付の計算(昨日とか明日とか何日前何日後とかを求める)
PHP (55 items)
2005年01月17日
VBやASPだったら、
DateAdd関数という便利な関数を使って日付の計算が出来ます。
>DateAdd関数
VBやASPには、
Date型という便利なデータ型があるのでこのような事が出来ますが、
PHPには日付型のデータ型はありません。
よって、ロジックで計算しないといけない訳ですが、
そんなに難しくはないのです。
DateAdd関数という便利な関数を使って日付の計算が出来ます。
>DateAdd関数
VBやASPには、
Date型という便利なデータ型があるのでこのような事が出来ますが、
PHPには日付型のデータ型はありません。
よって、ロジックで計算しないといけない訳ですが、
そんなに難しくはないのです。
計算には、下記関数を使います。
>mktime
>date
<例(昨日の算出)>
・・(1)
まず、mktime関数で現在の日付を取得します。
ここで、mktime関数の引数にdate関数を渡していますが、
date関数の戻り値がstringに対し、mktime関数の引数はint型です。
型を合わさなければ?と思いがちですが、PHPでは明示的型変換を必要としません。
<関連記事>
>PHPでは変数宣言時のデータ型宣言は必要ないですよ
この関数の戻り値はint(整数)型で返ってきます。
単位は「秒」です。
これベースでこの後の処理を行えば良い訳で、
日付の計算は、整数の足し引きで求めるのです。
・・(2)
(1)で求めた整数型の今日から”1日”を引いて昨日を求めます。
”86400”というのは、1日を秒で表した値ですね。
ちなみに、明日を求めるなら”86400”を足せば良い。
3日前は、
3日後は、
と、”86400”に日数を掛ければいいのです。
・・(3)
で、求めた結果をdate関数でフォーマット変換して出力します。
<出力結果>
ちなみに、今日が”2005年2月1日”であれば、
と、ちゃんと日付で計算してくれます。
月がまたがっても問題ありません。
>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