如何过滤laravel的时间戳?

时间:2013-12-18 17:07:14

标签: php laravel laravel-4 eloquent

我想过滤期间内记录的结果,但我找不到如何使用where子句获取确切数据范围的任何示例。

这些是从表单发布的数据:

  

[monthRangeStart] => 12

     

[yearRangeStart] => 2013

     

[monthRangeEnd] => 12

     

[yearRangeEnd] => 2013

以下是updated_at时间戳

的格式
  

2013-12-18 07:22:34

我应该如何完成代码行

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

3 个答案:

答案 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();

在这种情况下,您在任何特定月份的天数都不会出错。

答案 1 :(得分: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();

答案 2 :(得分:1)

应该这样做......

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

如果您决定需要按天/小时/分钟/秒进行过滤,则可以随时更换。