我遇到了一个问题,我试图在上个月的第一天和最后一天之间达到count()
,并且它显示了当前月份。我已经有两个月的这段代码了,还没有看到这个问题。
今天是2019年3月29日。这是我在刀片服务器中要查询的内容:
{{date('F')}} // returns "March"
{{date('F', strtotime("-1 month"))}} // returns "March"
// count scripts from last month
$first_day_last_month = date("Y-m-01", strtotime("-1 month"));
$last_day_last_month = date("Y-m-t", strtotime("-1 month"));
{{$doctor->scripts()->whereBetween('prescribe_date', [$first_day_last_month, $last_day_last_month])->count()}}
查询返回三月份的数据,而不是二月份的数据。这是对strtotime的滥用吗?
修改
在研究了重复的问题之后,我能够找出问题所在。
多亏了已接受的答案,我得以使用Carbon改进我的代码,并通过subMonthsNoOverflow(1)
使用首选的Eloquent语法。
答案 0 :(得分:1)
如果您使用Laravel,为什么不使用Carbon
就这么简单:
Carbon\Carbon::now()->startOfMonth()->subMonth()->format('F');
-已编辑为使用subMonth
,如@RossWilson所述。