1myb
1myb

Reputation: 3596

How to filter timestamp of laravel?

I want to filter the result of the records within the period, but i can't find any example of how to use the where clause to get the exact range of data.

These are the data posted from form:

[monthRangeStart] => 12

[yearRangeStart] => 2013

[monthRangeEnd] => 12

[yearRangeEnd] => 2013

and the following is the format of updated_at timestamp

2013-12-18 07:22:34

How should i finish the line of code

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

Upvotes: 1

Views: 3681

Answers (3)

user1669496
user1669496

Reputation: 33068

This should do it...

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

If you decide you need to filter on the days/hours/minutes/seconds as well, you can replace those as you go.

Upvotes: 1

The Alpha
The Alpha

Reputation: 146201

You may try something like this

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

Update :

$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();

Upvotes: 2

user2920996
user2920996

Reputation:

In my opinion if you decided to use some framework you should use tools it provides in order to create better solutions. Laravel has very beautiful Carbon class for date manipulation. This is solution I came to:

$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();

In this case you will never go wrong with number of days in any specific month.

Upvotes: 3

Related Questions