Reputation: 3573
I am very confused by this, maybe its something simple I am not seeing. If I want to see if a date is in the past of today I should be able to do something like this?
if( $league->date_start <= Carbon::now() ){
$join = false;
$message = 'Sorry, the league has already started';
}
if I dump out the dates its
$league->date_start = 2017-07-31 00:00:00
Carbon::now() = 2017-11-01 16:29:27
$league->date_start
is a protected date so its a carbon instance
But this doesnt work, if I switch it to $league->date_start >= Carbon::now()
it works and wont let me join. I know the "league" start date is in the past so shouldnt it be $league->date_start <= Carbon::now()
?????
Upvotes: 49
Views: 71918
Reputation: 242
The Basic idea behind comparing dates with Carbon is that both the dates must has to be in Carbon format, in your case Carbon::now()
is but $league->date_start
is not, which can be converted by using Carbon::parse()
There are many ways by which this can be achieved :
<=
:if(Carbon::parse($league->date_start) <= Carbon::now()){
$join = false;
$message = 'Sorry, the league has already started';
}
lte
:if(Carbon::parse($league->date_start)-> lte(Carbon::now()){
$join = false;
$message = 'Sorry, the league has already started';
}
lessThanOrEqualTo
:if(Carbon::parse($league->date_start)->lessThanOrEqualTo(Carbon::now()){
$join = false;
$message = 'Sorry, the league has already started';
}
Upvotes: 2
Reputation: 568
To check wether if $date
lies in a (day greater or equal than today) OR (day before today) use :
function isPast($date){
return Carbon::now()->startOfDay()->gte($date);
}
// true : $date is in past
// false: $date is in today or future
Upvotes: 7
Reputation: 111829
There's built-in Carbon method isPast
so you can use:
$league->date_start->isPast()
to determine if date is in past or not
Upvotes: 137
Reputation: 1059
Try using if ($league->date_start->diffInSeconds() >= 0)
. The method diffInSeconds
returns the difference between the current time and your carbon instance.
Here's an example of an output from tinker -
>>> $now = \Carbon\Carbon::now();
=> Carbon\Carbon {#648
+"date": "2017-11-01 16:41:04.000000",
+"timezone_type": 3,
+"timezone": "UTC",
}
>>> $now->diffInSeconds();
=> 5
>>> $now->diffInSeconds();
=> 7
>>> $now->diffInSeconds();
=> 8
>>> $now->diffInSeconds();
=> 10
>>> $now->diffInSeconds() > 0
=> true
Upvotes: 2
Reputation: 2287
Check the section “Comparison” on carbon docs. You should call $first->lte($second)
to compare two carbon instances.
Upvotes: 5