PHP 和 Laravel 获取当月的第一天和最后一天
做明细流水统计经常会遇到一些构建一周日期或一个月日期,主要实现方式就是获取到周或月的最后一个日期,然后循环构建数据结构:
$year = '2021';
$month = '8';
$month = $month < 10 ? '0' . $month : $month;
$data = [];
for ($i = 1; $i <= $lastday; $i++) {
$d = $d < 10 ? '0' . $d : $d;
$data['date'] = $year . '-' . $month . '-' . $d;
}
这里以月份为例,$lastday
最后一天是主要需要解决的问题。
网上找到一个版本的:
$lastday = date('j', mktime(0, 0, 1, ($month==12?1:$month+1), 1, ($month==12?$year+1:year))-24*3600)
'j'
表示 number
类型的天,后面用 mktime
创建当月最后一天的时间。直接创建最后一天时间仍然比较困难,所以先是构建一个下月第一天时间,然后时间戳减去一天时间,就可以得到当月最后一天的时间。
Laravel 获取当月的第一天和最后一天
$now = Carbon::now();
// 格式 Y-M-d
$firstDay = $now->startOfMonth()->subMonth()->toDateString();
$lastDay = $now->endOfMonth()->toDateString();
dd([$firstDay,$lastDay]);
//自定义格式
$firstDay = $now->startOfMonth()->subMonth()->format('Y-m');
参考: Laravel 获取上月的第一天和最后一天 - 「fly一样的感觉」
这里主要使用到 Carbon
库的工厂类方法。如果是指定年月而非当下,可以使用 Carbon::createFromDate()
来创建这样一个日期。
$date = Carbon::createFromDate($year, $month);
$d = $date->endOfMonth()->format('j');
Carbon
还有好多其他好用的工厂类方法,可以自行查询。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。