2013-12-18 76 views
1

我想在这段时间内过滤记录的结果,但是我找不到如何使用where子句来获取确切范围的数据的任何示例。如何过滤laravel的时间戳?

这些是从形式发布所述数据:

[monthRangeStart] => 12

[yearRangeStart] => 2013

[monthRangeEnd] => 12

[yearRangeEnd ] => 2013

以下是的updated_at时间戳的格式

2013年12月18日7点22分34秒

我应该如何完成的代码

$trans = Transaction::where('updated_at',) 
+0

请在Laravel论坛中查看[此帖子](http://forums.laravel.io/viewtopic.php?pid=14728#p14728)。 – 2013-12-18 17:09:23

+0

@André,万一没有约会? – 1myb

+0

你的问题到底是什么? –

回答

3

在我看来,如果你决定使用一些框架,你应该使用它提供的工具,以创造更好的解决方案。 Laravel拥有非常漂亮的Carbon类用于日期操作。这是我的解决方案:

$trans = Transaction::whereBetween('updated_at', [ 
    \Carbon\Carbon::createFromDate(Input::get('yearRangeStart'), Input::get('monthRangeStart'))->startOfMonth(), 
    \Carbon\Carbon::createFromDate(Input::get('yearRangeEnd'), Input::get('monthRangeEnd'))->endOfMonth() 
])->get(); 

在这种情况下,您将永远不会错过任何特定月份的天数。

+0

真棒! Thx教我学习碳:D – 1myb

1

行这应该这样做...

$trans = Transaction::where('updated_at', '>', "$yearRangeStart-$monthRangeStart-00 00:00:00") 
    ->where('updated_at', '<', "$yearRangeEnd-$monthRangeEnd-31 99:99:99") 
    ->get(); 

如果您决定需要过滤日/小时/分钟/秒,那么您可以将它们替换当你去时。

2

你可以试试这样

$start = Input::get('yearRangeStart') . '-' . Input::get('monthRangeStart'); 
$end = Input::get('yearRangeEnd') . '-' . Input::get('monthRangeEnd') . '-' . '31'; 
$trans = Transaction::whereBetween('updated_at', array($start, $end))->get(); 

更新的东西:

$start = Input::get('yearRangeStart') . '-' . Input::get('monthRangeStart'); 
$endYear = Input::get('yearRangeEnd'); 
$endMonth = Input::get('monthRangeEnd'); 
$endDays = cal_days_in_month(CAL_GREGORIAN, $endMonth, $endYear); 
$end = $endYear . '-' . $endMonth . '-' . $endDays; 

$trans = Transaction::whereBetween('updated_at', array($start, $end))->get();