[PHP] 今日から◯日前の簡単算出方法

2018年4月20日

PHP テクノロジー プログラミング

以前に書いた記事で「[言語別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は、サマータイムなどで使うので、日本ではあまり使わない値ですね。 たま〜に使う日付処理は、意外と忘れやすいので、自分用の便利関数などを作っておくといいかもしれません。 おためしあれ。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。