[PHP]日付を比較する方法

Read More

phpで日付の比較をするにはタイムスタンプを使うのが良い。


タイムスタンプとは"1369395857"のような形で表される。
これは1970年1月1日00:00:00 GMTから指定された時刻までの通算の秒数のこと。


例えばある日付と今日の日付を比較したい場合は以下のようにそれぞれをタイムスタンプに変更してから比較する。

■例:日付(タイムスタンプ)の比較
<?php
if(strtotime('today') >= strtotime('2013-05-24')) {
  echo 1;
}// end if
?>


日付をタイムスタンプに直してから比較するということは、つまり秒と秒との比較をしているということである。


ちなみにstrtotime()にはPHPマニュアルによるとISO8601のYYYY-MM-DD形式(イギリス風)が推奨されている。
このISO8601の形式とは世界標準規格として定められている形式である。
それ以外の曖昧な形式(アメリカ風、ヨーロッパ風)は曖昧さを避けるため使うべきでないとされている。
なおstrtotime()には引数に現在日時を取得する'now'や、一日前を取得する'-1 day'、2週間先を取得する'+2 week'などが利用できる。



また日付の比較はタイムスタンプになおさずとも日付同士のまま比較することもできる。
その場合は日付に含まれた"-"(ハイフン)や"/"(スラッシュ)を取り除いたYYYYMMDD形式で行う必要がある。

■例: 日付の比較_その2
<?php
if(date('Ymd') >= '20130524') {
  echo 1;
}// end if
?>





関連記事:
[PHP]指定した年月の末日を取得する
http://xirasaya.com/?m=detail&hid=264





Comments(2)

1  みやび  2013/05/25 (土) 13:46 ID:DuYuPjG15
業務で1970年以前に発行された本の情報とかを扱う事があって、
PEARのDATEクラスを利用しましたよ

他にも2038年問題があるので、2020~30年位にはUNIX時刻の拡張がされるのだとおもいますが、
今25年先のデータを扱うとしたら何がオススメですかね?
(買い替え、構築需要を狙って非依存の書き方もありだと思いますが)

2  シラサヤ  2013/05/25 (土) 20:31 ID:GyNn4TX15
1970年以前のデータを扱うこともそりゃあるよな。
俺は扱ったことないけどその場合タイムスタンプは負数にしてやって組むようにしたら?
色々と改良がいると思うけど。

2038年問題ねぇ…
確かにそろそろ影響が出だす頃合だしな。


上記2つの問題に答える前にちょと話をそらしてみる。
まあ自分語りになるんだけど、
俺はシステムを組むとき2つの考えを持っててさ。



1つはシステムが長く使えるようにというとにかく漠然としたもの。
これはプログラマなら当たり前にもつ気持ちだと思う。
自分が苦労して組んだものだし、いいものを作りたいし。
だから自分の持つ知識技術で最高のものを出そうとしてる。
→成長

もう1つは一つのシステムの寿命は大体10年と言われてて、その言を信じてるところがあって、最低10年持てばいいという考え。
10年使えば発注かけた方も元は取れているだろうし、新しい技術も当然出ているだろうし、利用者の現場からも新しい要望が出ているだろうし。
その時代の人間がそれを踏まえてまた新しいシステムを組めばいい。
→妥協


一見するとこの2つは相反する考えにみえる。
自分はそう思う。

でも自分個人の趣味でなく仕事としてやっている限り「落とし所」ってのはどうしても必要になる。
無限に金と時間を使えるわけじゃないから。



さて話を元に戻す。


1970年以前の問題にしろ、2038年以降の問題にしろ、根本的な解決策を俺は知らない。
なぜなら扱ったことがないから。
でもそれらについて調べたことはある。

で、俺がその時出した結論としては、
「タイムスタンプ使わなきゃいいんじゃね?」ってこと。

そのままの数値、例えば1969/05/25 20:19 のデータなら196905252019としてDBに格納しちゃえばいい。
2038年問題も同じ。


…まあ答えになってないってわかってるよ。
サーセン。

すっきりした答えを持ってるのなら逆に教えて欲しい。




まったく、いいところを質問してきやがる