MW211 EXIT

devlog
PHP/タイムスタンプ型(3)
2012年07月08日
1970年01月換算で1月=31日と、1970年02月換算で1月=28日になる
分水嶺をみつけたくなった。

地道に値が変わるところを調べた結果、以下で値が変わった。
┌──────────────────────────────────────┐
│echo (strtotime('1 month', 86400 * 30 + 53999) - (86400 * 30 + 53999));     │
│echo (strtotime('1 month', 86400 * 30 + 54000) - (86400 * 30 + 54000));     │
└──────────────────────────────────────┘
てっきり「86400 * 31±1」かなと思っていただけに意外だった。

1月30日+何か。いったい、なんだろう?

で、文字列に再変換。
┌──────────────────────────────────────┐
│echo date('Y/m/d H:i:s', 86400 * 30 + 53999);          →1970/01/31 23:59:59│
│echo date('Y/m/d H:i:s', 86400 * 30 + 54000);          →1970/02/01 00:00:00│
└──────────────────────────────────────┘
………。ローカル時間を日本時間にしていたから値が違うだけで、
結局1/31と2/1の間だったのね(ちゃんとローカル時間を考慮してくれてるんだ)。

結論、「strtotime('1 month')」は、その第二引数でしているする
基準時間の月数で31日や30日に変化する。
第二引数はたいてい省略し、現在時刻となるので現在月が反映されやすい。
ローカル時間をちゃんと考慮してくれる。
う~ん、いろいろわかった。
分類:PHP