Cách lấy ngày đầu tiên và cuối cùng của tháng này và tháng trước trong PHP
Xin chào, Mình cần cách tự động lấy ngày đầu tiên và ngày cuối cùng của tháng này (và tháng trước). Mình sẽ dùng chúng làm biến để thực hiện truy vấn MySQL.
Đại khái truy vấn MySQL của mình như thế này.
SELECT content FROM posts WHERE date_created BETWEEN $ngaydauthangnay and $ngaycuoithangnay
Trong đó:
- content: 1 column chứa nội dung
- posts: tên của Table
- date_created: 1 column có format là ngày tháng.
Bây giờ mình cần định nghĩa $ngaydauthangnay và $ngaycuoithangnay để nó tự động lấy ngày tháng của tháng hiện tại. Tương tự, mình cần làm như thế với tháng trước.
3 CÂU TRẢ LỜI
@dokkan7 bạn có thể dùng thư viện carbon như @minhhieuuet đề cập hoặc dùng php thuần luôn, nó support cả rồi
echo date('Y-m-01') ; // ngày đầu tháng
echo date("Y-m-t"); // ngày cuối tháng
$month_ini = new DateTime("first day of last month"); ngày đầu của tháng trước
echo $month_ini->format('Y-m-d');
$month_end = new DateTime("last day of last month"); ngày cuối của tháng trước
echo $month_end->format('Y-m-d');
Hoặc bạn có thể dùng hàm trong sql để lấy cái đó luôn, đỡ phải dùng php. (cho nhanh và tiết kiệm bộ nhớ đc xíu )
* LAST_DAY(curdate() - interval 1 month) + interval 1 day // ngày đầu tháng
* select last_day(curdate()) // ngày cuối tháng
* select last_day(curdate() - interval 2 month) + interval 1 day// ngày đầu của tháng trước
* select last_day(curdate() - interval 1 month) // ngày cuối của tháng trước
Hy vọng no useful với bạn.
xuất sắc!
Cảm ơn mọi người.
Bạn có thể dùng extension Carbon để xử lý ngày tháng dễ dàng hơn https://carbon.nesbot.com/ muốn lấy ngày đầu tiên của tháng trước thì có thể dùng
$startDayPreviousMonth = Carbon::now()->modify('-1 months')-> startOfMonth()
$endDayPreviousMonthDay = Carbon::now()->modify('-1 months')-> endOfMonth()
Cảm ơn bạn.
$startDayPreviousMonth = Carbon::now()->modify('-1 months')-> startOfMonth(); cái này trả về obj, mình phải format nữa mới ra được Date.
Dùng PHP luôn nếu chỉ yêu cầu thế không thì dùng Carbon sẽ tiện hơn khi cần tác động vào ngày tháng bằng các biến:
$firstDayLastMonth = date('Y-m-d 00:00:00', strtotime('first day of last month'));
$lastDayLastMonth = date('Y-m-d 23:59:00', strtotime('last day of last month'));