日付関数は開発では必ず使います。そんでもって現在主流なのがdate、time、mktime、strtotime関数なのですが、この関数って計算するときってタイムスタンプにしてやる方法が一般的ですよね。めちゃ面倒だしわかりにくい~しかも2038年問題もあるから2038年までしか使えなくなるし。
そこでPHP5.2から登場したDateTimeクラス!
これはかなり面白い!直感的に計算ができるし2038年問題も対応済みです!まあ今後は日付関数はこれが主流になっていくことでしょう!
PHP5.3からかなり機能がプラスされているのでDateTimeクラスを使う場合は5.3から使うことをお薦めします。
まず本日の表示はnew DateTimeでオブジェクト作成でformatメソッドで整形するだけ~~dateと変わらないですね。
か、かんた~ん!
スポンサーリンク
1 2 | <?php $today = new DateTime();//本日 echo "本日は", $today->format('Y年m月d日(D) H:i:s'),"です。";?> |
因みに$yesterday = new DateTime(‘yesterday’);
echo $yesterday->format(‘Y年m月d日(D)’);で昨日の表示ができます。
DateTimeクラスのコンストラクタ引数は結構様々な書き方に対応しております。
new DateTime(‘@1274461920’);とタイムスタンプも大丈夫ですよ~
それから差分表示
$diff = 大きい時間(元の時間)->diff(小さい時間(引く時間));
$diff->format(‘%y年%mヶ月%d日’);
ででてきますよ~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php $php5 = new DateTime('13 July 2004');//PHP5.0のリリース日 echo "PHP5.0のリリース日は", $php5->format('Y年m月d日(D)'), "です。リリースされてから"; $diff = $today->diff($php5); echo $diff->format('%y年%mヶ月%d日'),"経っています"; $php51 = new DateTime('2005/11/24');//PHP5.1のリリース日 echo "PHP5.1のリリース日は", $php51->format('Y年m月d日(D)'), "です。リリースされてから"; $diff = $today->diff($php51); echo $diff->format('%y年%mヶ月%d日'),"経っています。"; $php52 = new DateTime('2006-11-2');//PHP5.2のリリース日 echo "PHP5.2のリリース日は", $php52->format('Y年m月d日(D)'),"です。リリースされてから"; $diff = $today->diff($php52); echo $diff->format('%y年%mヶ月%d日'),"経っています"; $php53 = new DateTime('20090630');//PHP5.3のリリース日 echo "PHP5.3のリリース日は", $php53->format('Y年m月d日(D)'), "です。リリースされてから"; $diff = $today->diff($php53); echo $diff->format('%y年%mヶ月%d日'), "経っています。総日数は", $diff->format("%a 日"),"です。"; $php54 = new DateTime('2012-03-01');//PHP5.4のリリース日 echo "PHP5.4のリリース日は", $php54->format('Y年m月d日(D)'), "です。リリースされてから"; $diff = $today->diff($php54); echo $diff->format('%y年%mヶ月%d日'), "経っています。"; $php55 = new DateTime('2013-06-20');//PHP5.5のリリース日 echo "PHP5.5のリリース日は", $php55->format('Y年m月d日(D)'), "です。リリースされてから"; $diff = $today->diff($php55); echo $diff->format('%y年%mヶ月%d日'), "経っています。";?> |
日付だけでなく時間の差分もできます!
1 2 3 4 | <?php $sleep = new DateTime('2011-06-01 23:47'); $wakeup = new DateTime('2011-06-02 07:38'); $diff = $sleep->diff($wakeup);?> echo $diff->format('%h時間%i分寝ました');?> |
タイムスタンプ表示も簡単です!
1 | <?php $today = new DateTime();echo "本日のタイムスタンプは", $today->format('U'),"です。";?> |
2038年問題も解消!!
1 | <?php $dt = new DateTime("2040-01-01");echo "2040年のタイムスタンプは" ,$dt->format('U'),"です";?> |
加減算、足したり引いたりも簡単です!!
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $dt = new DateTime('2011-07-01 10:30:50'); echo "元になる時間です。→" , $dt->format('Y年m月d日 H時i分s秒'); echo "<p>そしてその日付に1年2ヶ月3日4時間5分6秒足してみましょう!</p>"; $dt->add(new DateInterval('P1Y2M3DT4H5M6S')); echo "→", $dt->format('Y年m月d日 H時i分s秒'); echo "<p>そして更にそこから3年2ヶ月1日を引いてみます。</p>"; $dt->sub(new DateInterval('P3Y2M1D')); echo "→", $dt->format('Y年m月d日 H時i分s秒'); echo "<p>そして更に更にそこから1時間2分3秒を引いてみます。</p>"; $dt->sub(new DateInterval('PT1H2M3S')); echo "→", $dt->format('Y年m月d日 H時i分s秒');?> |
違う表記方法の加減算
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $dt = new DateTime("2011-07-1 10:15:20"); echo "元になる日付です。→", $dt->format('Y年m月d日 H時i分s秒'); $d = $dt->add(DateInterval::createFromDateString("1year 2month 3day 4hour 5min 6sec")); echo "そこで1年2ヶ月3日4時間5分6秒足してみます。→", $d->format("Y-m-d H:i:s"); $d = $dt->sub(DateInterval::createFromDateString("6year 5month 4day 3hour 2min 1sec")); echo "そして更に6年5ヶ月4日3時間2分1秒引いてみます。→", $d->format("Y-m-d H:i:s"); $d = $dt->add(DateInterval::createFromDateString("1year 2month 3day 4hour 5min 6sec ago")); echo "更に1年2ヶ月3日4時間5分6秒引きます。→", $d->format("Y-m-d H:i:s"); ?> |