PHP / Ope / 日時操作

PHP / Ope / 日時操作

バージョンと製造年月日

  • 2011-05-17
  • PHP5.3

DateTimeクラス

PHPは長らく日付を文字と数値をごちゃごちゃ操作する関数てんこ盛りの状態で管理してきたがDateTimeクラスが導入されたのでこれを中心に使いましょう

このクラスなぜか、各値にアクセスするアクセサが存在しない。 どういう理由かは不明・・・謎

現在時点のDateTimeオブジェクトを作る

$dt = new DateTime();

日付っぽい文字列からDateTimeオブジェクトを作る

ここら辺は過去の資産バリバリ使えるところだからかなり適当に書いても認識されるだろうな・・・

$dt = new DateTime("2000-12-19");
$dt = new DateTime("2000-12-19 05:13:40");

文字列として出力する

formatメソッドを使う

$dt->format("Y-m-d H:i:s");

各値へのアクセサが無いのでformatを駆使してやるのかね

時刻の加算減算

12年前に戻す

modifyメソッドを使うと日付を破壊的に演算することができる。

$d = new DateTime();
$d->modify("-12 year");

月の頭の日付

formatを利用して適当にやっつける

$base = new DateTime();
$first = new DateTime($base->format('Y-m-01 00:00:00'));

月末日付

modifyの全貌を理解してないのでもっといいパラメータがあるかも。とりあえず一日は全部の月にあるということを利用して書いた

$base = new DateTime();
//一日作る
$last = new DateTime($base->format('Y-m-01 23:59:59'));
//一月先に進めて・・・
$last->modify("+1 month");
//一日戻る(月末)
$last->modify("-1 day");

一年分のDateTimeオブジェクトを作る

途中で生成の分岐を入れるのが面倒なので先に入れ物だけ全部作っておく。あふれた分はあ溢れっぱなしになるので閏年の分以上ループすれば何周してもよい

$dt1 = new DateTime("2011-01-01");
$months = array();
$months[1] = array();
$months[2] = array();
$months[3] = array();
$months[4] = array();
$months[5] = array();
$months[6] = array();
$months[7] = array();
$months[8] = array();
$months[9] = array();
$months[10] = array();
$months[11] = array();
$months[12] = array();
for($i = 0; $i < 400; $i++){
    $dt = clone $dt1;
    $dt->modify(strval($i)." day");
    $months[intval($dt->format('m'))][intval($dt->format('d'))] = $dt;
}

Unixタイムスタンプ(1970年からの積算秒数)を得る

時刻を秒と捉えて切ったり貼ったりする場合はUnixタイムスタンプに変換すると便利なので

$now = new DateTime();
echo $now->getTimestamp();

このgetTimestampで得られる値はtime関数で得られる値と同じようなものである。

参考サイト

タグ

php/ope/datetime_ope.txt · 最終更新: 2020-10-26 19:11 by ore