如何在 Laravel 5.1 中获取上一周的数据?

8

我希望在Laravel 5.1中获取上一周插入的数据。目前我正在使用以下查询:

$AgoDate=\Carbon\Carbon::now()->subWeek()->format('Y-m-d');  // returns 2016-02-03
$NowDate=\Carbon\Carbon::now()->format('Y-m-d');  // returns 2016-02-10
$query->whereBetween('created_on', array($AgoDate,$NowDate));

这会返回最近7天的数据,但我需要上周的数据,也就是从1月31日到2月6日的数据,即上一周的数据。

注意:在我的情况下,一周从星期天开始,到星期六结束。


原始MySQL查询怎么样? - Mobasher Fasihy
好的,你可以用原始的MySQL发布你的答案,我会将其转换为Laravel,请告诉我是否有任何问题。 - Amrinder Singh
请查看此链接 http://stackoverflow.com/questions/28936174/how-can-i-get-last-week-current-week-and-last-month-record-from-mysql/28936788#28936788,如果不是你想要的,请告诉我。 - Mobasher Fasihy
1个回答

14

编辑:根据提问者的问题进行调整

要表示过去的时间,请使用

$currentDate = \Carbon\Carbon::now();
$agoDate = $currentDate->subDays($currentDate->dayOfWeek)->subWeek();// gives 2016-01-31

同样地,你可以获取你的现在日期

$currentDate = \Carbon\Carbon::now();
$nowDate = $currentDate->subDays($currentDate->dayOfWeek + 1); // gives 2016-02-06

调整一周的开始日期(星期日/星期一),我认为您可以添加或减去某些天到 dayOfWeek 中,例如 $currentDate->subDays($currentDate->dayOfWeek + 1 /* or -1 */);

编辑:如评论中所述,如果适用于您,则也可以使用 startOfWeek() 方法代替 subDays()


5
或者 $agoDate = $currentDate->startOfWeek()->subWeek(); - Ralph John Galindo
谢谢 @RalphJohnGalindo,我错过了 :) - codisfy
@RalphJohnGalindo,&codeHeart 但它给出的是星期一,我需要从星期日开始。 - Amrinder Singh
@Insomania 正如答案中提到的,您可以添加一些数字来更改星期开始日期。例如,在您的情况下,如果您需要将 $nowDate 设置为 2016-02-06,则可以执行类似以下的操作:$nowDate = $currentDate->subDays($currentDate->dayOfWeek + 1); - codisfy
@codeHeart 非常感谢,它真的像魔法一样运行 :) - Amrinder Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接