PHPプロ!TIPS+

strtotimeの落とし穴

strtotime関数はGNU Date Input Formats形式に準拠した文字列をタイムスタンプ形式に変えるためのものです。使用方法として、ある時点から何年前、何ヶ月 後、何日前などの日付を計算するためなどに使用できます。月末に実行されるスクリプト内に、strtotime関数を使用していると思わぬ落とし穴にはまることがあるので注意しましょう。

月末に以下のように先月の日付文字列を取得するコードを記述したとします。

$next_month = date('Y-m', strtotime('-1 month'));

このコードは3,5,7,10,12月の月末に実行すると、そのまま3,5,7,10,12月が返ってきてしまいます。これはなぜかというと、3月31日という日付から一ヶ月前を計算しようとしたときに、2月31日が存在せず、3月3日という日付が返ってきてしまうのが原因のようです。

なので、翌月、先月、何ヶ月前などの計算を行う場合は、mktime関数を使用して一つ一つ指定することになるでしょう。とはいっても、3月31日の一ヶ月前は明 確に「これだ!」といえる定義があるわけではないと思いますが。。

それと、これはTipsとはいえませんが、PHP 5から追加された日付関数date_sunrisedate_sunsetという日の出、日の入時刻を計算する関数を発見してしまいました。この関数は使われるのでしょうか。。

 
strtotime
 
http://jp2.php.net/strtotime
 
date_sunrise
 
http://jp2.php.net/date_sunrise
 
date_sunset
 
http://jp2.php.net/date_sunset

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)