LoginSignup
3
3

More than 5 years have passed since last update.

【PHP】日付のサマリー(DateTime)

Last updated at Posted at 2018-05-22

DateTime クラス

DateTimeの使い方を出来る限り纏めていきます。(随時更新)

現在日時

フォーマット(秒精度) YYYY-MM-DD HH:MM:SS

Today
// 今日の日付
$today = new \DateTime ();
// 今日の日付 フォーマット YYYYMMDD
$today_Ymd = $today->format ( 'Ymd' ); // string(8) "20180522"
// 今日の日付 フォーマット YYYY-MM-DD HH:MM:SS
$today_YmdHis = $today->format ( 'Y-m-d H:i:s' ); // string(19) "2018-05-22 17:25:28"

フォーマット(マイクロ秒精度) YYYY-MM-DD HH:MM:SS.U

Today
// 現在日時 マイクロ秒精度
$now = \DateTime::createFromFormat('U.u', sprintf('%6F', microtime(true)));
// 現在日時 フォーマット YYYY-MM-DD HH:MM:SS.U
$now = $now->format('Y-m-d H:i:s.u');  // string(26) "2018-05-22 08:25:28.406171"

指定日時

DateTime
// 先月の初めての水曜日 フォーマット YYYY-MM-DD HH:MM:SS
$date_fsolm = new \DateTime ( 'first wednesday of last month' );
$date_fsolm = $date_fsolm->format( 'Y-m-d H:i:s' ); // string(19) "2018-04-04 00:00:00"

// 今月の最後の金曜日 フォーマット YYYY-MM-DD
$date_lfotm= new \DateTime ( 'last friday of this month' );
$date_lfotm= $date_lfotm->format( 'Y-m-d' ); // string(10) "2018-05-25"

// 今日から一ヶ月前 フォーマット YYYY-MM-DD
$date_1ma = new \DateTime ( '1 months ago' );
$date_1ma = $date_1ma->format( 'Y-m-d' ); // string(10) "2018-04-22"

// 今日から一ヶ月後 フォーマット YYYY-MM-DD
$date_nm = new \DateTime ( 'next months ' );
$date_nm = $date_nm ->format( 'Y-m-d' ); // string(10) "2018-06-22"

// 今日から20日後 フォーマット YYYY-MM-DD
$date_20d = new \DateTime ( '20 day' );
$date_20d = $date_20d->format( 'Y-m-d' ); // string(10) "2018-06-11"

// 今日から一週間前 フォーマット YYYY-MM-DD
$date_b1w = new \DateTime ( '-1 weeks' );
$date_b1w = $date_b1w->format( 'Y-m-d' ); // string(10) "2018-05-15"

// 現在から次の曜日  フォーマット YYYY-MM-DD
$dayname = new \DateTime ( 'Monday' );
$dayname = $dayname->format( 'Y-m-d' ); // string(10) "2018-05-28"

指定日時(比較)

DateTime

// 指定日付 フォーマット YYYYMMDD
$date = "20180522";
$dateTime = new \DateTime ( $date );
$dateTime = $dateTime ->format ( 'Ymd' );

// 日付の比較 ($dateは DateTime 形式ではないので、比較不可。)
if ($today > $dateTime ) {
    // 指定日付は過去です。
} else {
    // 指定日付は今日より未来です。
}

指定日時(時間間隔計算)

DateTime
// 先月の初日 0時0分0秒 フォーマット YYYYMMDD 00:00:00
$dateFrom = new \DateTime ( 'first day of last month' );
$dateFrom->setTime ( '00', '00', '00' );
$from = $dateFrom->format ( 'Ymd H:i:s' ); // string(17) "20180401 00:00:00"

// 先月の末日 23時59分59秒 フォーマット YYYYMMDD 23:59:59
$dateTo = new \DateTime ( 'last day of last month' );
$dateTo->setTime ( '23', '59', '59' );
$to = $dateTo->format ( 'Ymd H:i:s' );  // string(17) "20180430 23:59:59"

// 先月の初日~末日の時間間隔
$diff = $dateFrom->diff($dateTo);
// 時間間隔 フォーマット [+]/[-] X days
$diff_days = $diff->format('%R%a days');  // string(8) "+29 days"
// 時間間隔 フォーマット HH:MM:SS
$diff_HIS = $diff->format("%H:%I:%S");   // string(8) "23:59:59"
// 時間間隔 フォーマット X month, Y days
$diff_month = $diff->format('%m month, %d days'); //string(16) "0 month, 29 days"

参考:
さまざまな相対日付/時刻フォーマット
new DateTime

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3