PHP,Laravelで日付を操作したいとき、ぱっと出てくるのが、
- PHPのDateTimeを使う
- Carbonを使う
だと私的に思っています。
##DateTimeを使う適当な例
現在の時刻をDBに保存する場合、
Controller内
Model::insert(array('created_at'=>Carbon::now()));
などのように、Carbon::now();を使用すると
2015-01-01 15:54:54
と、H:i:sまで保存してくれます。
しかし、Y-m-dのみ取得したいと感じることって、結構多いですよね。
(日付から検索するシステムを作るときなど...。)
そのような場合はDateTimeを使うと良いのかな?と思います。
Controller内
リクエストで受け取ったデータを、Y-m-d表記にし、日付で条件検索したい場合
$date = date_create($request->date) //リクエストのdateがH:i:sまで含んでるとする.
$date = date_format($date , 'Y-m-d');
$obj = Model::where('created_at' , 'like' , $date . '%')->get();
Y-m-d表記にViewで表示させたいときなどの場合
$items = Model::all();
foreach ($items as $item) {
$date = date_create($item->date);
$date = date_format($date , 'Y-m-d');
$item->date = $date; //取得したtimestampのデータを、Y-m-dに変換
}
##Carbonを使った適当な例
現時刻から、一日後、一か月後などを知りたい場合はCarbonを使って見るのも良いでしょう。
Controller内
現時刻から一か月後の時間を取得したい場合
$time = new Carbon(Carbon::now());
dd($time->addMonth(1));
現時刻の年だけ取得したい場合
$time = new Carbon(Carbon::now());
dd($time->__get('year'));
詳しくはCarbonクラスを見て頂ければ様々な場面で応用できるので使ってみてください。
また、timezoneの設定は、config/app.php の timezoneを変更すれば切り替わります。
app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',