Press "Enter" to skip to content

carbon获取上个月的时间,解决月份31号时间bug问题

在laravel框架中自带了这个Carbon 时间类

所以平时就用这个类来获取时间戳很方便,在获取上个月的开始时间和结束时间的时候,在31号测试的时候发现本月和上月数据没区别,就打印调试了一下,结果今天发现了bug,获取的上个月时间只能回到30天以前的时间,如果这个月

刚好有31天的话,就会出现此bug

//上个月第一天
Carbon::now()->subMonth()->firstOfMonth()

//上个月最后一天
Carbon::now()->subMonth()->lastOfMonth()

//这个月第一天
Carbon::now()->firstOfMonth()

上面的代码只能获取当前月的30天前的时间,所以获取上个月的时候会出现bug

于是我又仔细研究了一下发现这样写才会不出现上面的问题,

// 获取本月的第一天
 $start = new Carbon('first day of this month');
$start = $start->startOfMonth();

//上个月第一天
$firstOfMonth = new Carbon('first day of last month');
 $firstOfMonth = $firstOfMonth->startOfMonth();

//上个月最后一天
$lastOfMonth = new Carbon('last day of last month');
$lastOfMonth = $lastOfMonth->endOfMonth();

这样直接实例化上月的第一天的当前时间,然后在运行一下startOfMonth()、endOfMonth();就可以完美解决困扰了

Leave a Reply

Your email address will not be published. Required fields are marked *