2013-12-18 74 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();