Chú ý khi dùng Carbon::createFromFormat('Ym',...)

Carbon::createFromFormat

Chú ý khi dùng Carbon::createFromFormat('Ym',...)
Photo by Ben Griffiths / Unsplash

Vấn đề: thời điểm 08/31 muốn tạo tháng 2 nhưng lại trả về tháng 3

Cách giải quyết

  1. Dùng Carbon::create(...$args) thì không vấn đề gì
>>> Carbon::create(2019,2);
Carbon::create(2019,2);
=> Carbon\Carbon @1548946800 {#3012
     date: 2019-02-01 00:00:00.0 Asia/Tokyo (+09:00),
   }

2. Dùng Carbon::createFromFormat($format, $datetimeStr) nguy hiểm cần chú ý

>>> Carbon::createFromFormat('Ym', '201902');
Carbon::createFromFormat('Ym', '201902');
=> Carbon\Carbon @1551598344 {#3013
     date: 2019-03-03 16:32:24.0 Asia/Tokyo (+09:00),
   }

tháng 2 có 28 ngày nên trả về là ngày 3/3

viết lại như dưới thì chạy đúng, sử dụng Ymd

>>> Carbon::createFromFormat('Ymd', '20190201')->startOfMonth();
Carbon::createFromFormat('Ymd', '20190201')->startOfMonth();
=> Carbon\Carbon @1548946800 {#3016
     date: 2019-02-01 00:00:00.0 Asia/Tokyo (+09:00),
   }