PHP

strtotime() で「第◯週の◯曜日」の日付を得る

ちょこちょこ、Perlで書いたスクリプトをPHPに移行、なんてことをしてます。PHPはWebで使えそうな関数が多くてラクに感じることもありますが、中でも「第何週の何曜日」から一発で日付の取得ができるstrtotime()が便利だったのでメモします。

strtotime
この関数は英語の書式での日付を含む文字列が指定されることを期待しており、nowで与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。nowが指定されていない場合は現在日時に変換します。
PHP_ strtotime - Manual

ということで経過秒数を取得する関数だそうなのでそのままdate()に渡して日付を得ます。date()の第一引数で渡すフォーマット「j」は先頭にゼロをつけない日にちです。

date_default_timezone_set('Asia/Tokyo'); // デフォルトのタイムゾーン

$d = date('j', strtotime("first monday of may 2016"));
echo '2016年5月の第一月曜日は' . $d . '日です。';
> 2016年5月の第1月曜日は2日です。

strtotime()には「"first monday of may 2016"」という文字列を渡していますが、こういった書き方ができるのはありがたいです。たぶんPerlでも探せば似たようなモジュールはあるんでしょうが、CGI環境ではやたらめったらモジュールを読み込ませたくはないので車輪の再発明と言われようがなるべくオノレで書くようにしてます。なので「毎月第◯曜日がキャンペーン」とかの動的表示はなかなか面倒に感じてましたが関数一発で取得できるのでうれしいです。

他にも"next"とか相対的な日付取得に使えるワードがあるようですが、その程度は自前でもそれほど難しくないかなと思います。

↑すいません、送信内容が反映されないままでした。訂正してお詫びします。(2016.10.3)