LoginSignup
0
1

More than 1 year has passed since last update.

PHPで日付を扱うには

Last updated at Posted at 2021-05-25

Carbonクラス

Javaなどの言語を使っているとCalenderクラスやDateクラスなど、使う用途によって色々使い分けが必要で日付を扱うことに苦手意識がありました。
ですが、PHPでは日付に関してCarbonクラスさえ理解していれば、問題ありません!

参考にしたサイト:https://blog.capilano-fw.com/?p=867

色々なサイトを確認しましたが、こちらのサイトが紹介している種類が一番多く、索引としてページ内検索をかけて利用するのに重宝しています。

筆者が実際に使用したメソッドは下記になります

日付の取得

日時の取得
$today = new Carbon('today');
$today = Carbon::today();
$today = Carbon::today('Asia/Tokyo') //タイムゾーン付きの取得

同様にyesterdaytomorrowも使うことができます。

日付のみ取得したいとき
$today = (new Carbon('today'))->toDateString();
$today = Carbon::today()->toDateString();
$today = Carbon::today('Asia/Tokyo')->toDateString(); //タイムゾーン付きの取得

どれも→toDateString()をメソッドチェーンの形で繋げるだけですが、一番上の例は個人的に少し見づらく感じるのであまりお勧めしません。

日付の比較

日時の比較
$first = new Carbon('2021-01-01 13:00:00');
$second = new Carbon('2021-01-01 14:00:00');

//より前(条件に=を含まない)
if($first->lessThan($second)){
  echo '$first が前の時間です。';
}

//以前(条件に=を含む)
if($first->lessThanOrEqualTo($second)) {
  echo '$first が同じか前の時間です。';
}

参考サイトで表示されている、ItやIteはなぜかエラーになってしまって使えませんでしたので、lessThanを使用しました。(利用環境:Laravel8.x)

レスポンスの時の形式を変更する

データベースから値を取得し、そのままのcreated_atupdated_atをレスポンスしようとすると00000Zのような形式になり、なんだかうまく日付が反映されません。
そんなときには、取得している日付情報をISO8601形式の日付にフォーマットしましょう

ISO8601形式の日付に変換する
 $datetime->toIso8601String();
0
1
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
0
1