PHPのstrtotime()関数で日付を導出してみる

2010 年 2 月 3 日 | カテゴリー: LAMP奮闘記, PHP, まぎれもなくただのメモ

PHPはやはり便利だなぁ、と痛感したついでにメモ。

先日の郵便番号データですが、日本郵便さんのHPで毎月初めに差分データを公開してくださっています。

削除対象データと追加対象データがそれぞれ別CSVとしてDLできますが、そのファイル名は以下のような感じです。

  • 削除データファイル名・・・DEL_yymm.CSV
  • 追加データファイル名・・・ADD_yymm.CSV

この差分データをPHPスクリプトでSQLiteに反映させてしまおう、と考えてコードを書いてみたのですが、検証でいきなりつまづきました><

上記のデータは「毎月月初」に「前月分」として公開されるので、例えば今月(2010/02)では、ファイル名は以下になります。

  • 削除データファイル名・・・DEL_1001.CSV
  • 追加データファイル名・・・ADD_1001.CSV

まずは、このファイルの存在チェックを行おうと書いたコードはコチラです。

$str = date('ym');
$addFile = sprintf('ADD_%s.CSV', $str);
$delFile = sprintf('DEL_%s.CSV', $str);

で、この変数をvar_dump()などしてみると、2月なので当然こうなります。

var_dump($addFile, $delFile);
string(12) "ADD_1002.CSV"
string(12) "DEL_1002.CSV"

う~ん、これでは希望するファイルの存在チェックは出来ないですね。date()関数の第2引数にはtimestampを渡せるので、自前で現在からn日前のtimestampを計算して渡してやらないとダメかな??などと考えたのですが、そこはPHP。さすがPHP。

strtotime()関数の引数として「予約キー」というのを指定してやれば、相当柔軟にtimestampが求められるみたいです。

今回のケースではこれでOK。

$str = date('ym', strtotime('-1 month'));

ちなみに公式マニュアルの例によると、以下のような指定が可能みたいです。

<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

相当柔軟で実に便利ですね!!

以下のエントリも参考にさせていただきました^^

【PHP】 date()で簡単に1ヵ月後や1ヶ月前の日付を簡単に出力する

コメントはまだありません。