以前に書いた記事で「
[言語別TIME処理] PHPで時間処理」というのがあるが、実戦で役に立たない記事だった。
レポートシステムなどを作るときに、1週間前とか、3日前、2ヶ月前というのをPHPでサックリと行いたい場合、いくつかやり方があったので、備忘録として残しておきます。
秒数で計算
date関数ではなく、time関数で、現在の秒数を取得し、◯日前を◯秒前にすることでUNIXタイムスタンプを取得し、それを日付に置き換える方法。
1日前の秒数
1(日前) × 60秒 × 60分 × 24時間 = 86,400秒
日数の箇所を変えれば数日レベルであれば、簡単に対応できる。
現在のUNIXタイムスタンプから、巻き戻す秒数を引く
$beforeSec = time() - (1 * 60 * 60 * 24);
UNIXタイムスタンプを日付に変換
$dateStr = date("Y/m/d" , $beforeSec);
日付フォーマットはやはりdateコマンドを利用します。
1ヶ月前の考え方
しかし、ここで、問題発生!!!
「1ヶ月前」は、30日と31日と28、29日のパターンがあるぞ!!
どのようにすれば良いのか???
と思っていたら、「strtotime」というUNIXタイムスタンプを取得する、いいコマンドがありました。
UNIXタイムスタンプの取得
// 1ヶ月前
strtotime("-1 month");
// 1日前
strtotime("-1 day");
// 1週間前
strtotime("-1 week");
// 1年前
strtotime("-1 year");
ちなみに。-1を+1にすると、◯日後のような取得もできます。
あれ?前半の秒数計算いらね〜や。
似たような処理「mktime」
strtotimeはUNIXタイムを取得する関数ですが、同じ用途で、「mktime」というのもあります。
こちらは、年月日、時分秒などを指定して、その時のUNIXタイムスタンプを取得できます。
int mktime(時 , 分 , 秒 , 月 , 日 , 年 , is_dst);
ちょっと気をつけなければいけないのは、指定する値の並びが気持ち悪いという点です。
ちなみに、is_dstは、サマータイムなどで使うので、日本ではあまり使わない値ですね。
たま〜に使う日付処理は、意外と忘れやすいので、自分用の便利関数などを作っておくといいかもしれません。
おためしあれ。
0 件のコメント:
コメントを投稿