php date的坑
先看一下这段代码
$str = '2023-10-31';
date('Y-m-01', strtotime("{$str} -1 month"));
目测这个时间获取到的是 2023-09-01
对不对, 其实得到的结果是 2023-10-01
, 是不是很坑?
如果想要获取准确的推荐 \Carbon\Carbon::now()->subMonthNoOverflow()->startOfMonth()->toDateString()
高认可度评论:
楼上已经贴出了鸟哥的文章,这不是什么BUG,补充一点文档说明(如下图),文档上已经说明,相对月份值是根据它们经过的月份长度计算的,以你的代码为例,减1月,经过就是9月份,9月总共30天,结果就是10.1。
Carbon包封装2个方法,只不过有一个方法正好适用于你的业务。
www.laruence.com/2018/07/31/3207.h...
www.laruence.com/2018/07/31/3207.h...
www.laruence.com/2018/07/31/3207.h...
因为php - 1month实际上是减的上个月的天数。不可信。真想获取上月第一天可以这么写
www.kancloud.cn/wenshunbiao/wenshu...
楼上已经贴出了鸟哥的文章,这不是什么BUG,补充一点文档说明(如下图),文档上已经说明,相对月份值是根据它们经过的月份长度计算的,以你的代码为例,减1月,经过就是9月份,9月总共30天,结果就是10.1。
Carbon包封装2个方法,只不过有一个方法正好适用于你的业务。
subMonthNoOverflow,你这有点菜鸟了 :joy:
不仅仅是PHP的获取有此问题,go语言的也有这个问题,解决方法可以获取本月第一天的时间然后减去一个月即可