phpで紀元前を含めた日付の比較をタイムスタンプで行う。

phpで紀元前を含めた日付の比較をタイムスタンプで行う。



phpで日付をタイムスタンプに変換するには、「strtotime」を使うのですが、これは1970年1月1日 00:00:00 UTCを基準にしているため、それ以前の日付を指定しても値は返って来ません。

echo strtotime('1990/1/1');
// => 631152000
echo strtotime('1970/1/1');
// => 0
echo strtotime('1192/1/1');
// => (FALSE)

で、こういう時は、「DateTime」を使えとのこと。DateTimeであれば、紀元前の年代も含めてタイムスタンプを取得することが出来ます。


但し、紀元前(マイナス符号)を用いる際の入力方法に決まりがあるので要注意。
日付は「-(ハイフン)」で区切り、「4桁-2桁-2桁」となるように「0」も追記すること。

$time1 = new DateTime('1192/1/1');
echo $time1->format('U');
// => -24551337600
$time2 = new DateTime('-1192/1/1');
echo $time1->format('U');
// => 980990340 (意図しない値)
$time3 = new DateTime('-1192-01-01');
echo $time1->format('U');
// => -99783100800 (こっちが正解)

2015-01-06_14h12_18

今日はここまで
phpで紀元前を含めた日付の比較をタイムスタンプで行う。

phpで紀元前を含めた日付の比較をタイムスタンプで行う。


開発

phpで日付をタイムスタンプに変換するには、「strtotime」を使うのですが、これは1970年1月1日 00:00:00 UTCを基準にしているため、それ以前の日付を指定しても値は返って来ません。 echo strt…


関連する記事



こちらはいかが?


[php] マルチバイトでltrimを使いたい。
[php] マルチバイトでltrimを使いたい。

ltrimは第二引数にマルチバイトが対応していないので、そのまま使うと文字化けします。 なので、面倒だけどmb_substrで最初の文字列を取得して、それがltrimしたい文字列だったらそれ以降を取得して置き換えてみます…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*(必須)

*(必須・表示されません)