Reputation: 2000
I just started using the Carbon extension (seems pretty sweet so far), but am confused on the Carbon::now()
function. According to the docs, it seems as though this function should reflect the current time in the users current timezone, however, I seem to get a time that is an hour ahead of GMT.
i.e. Carbon::now()
says 2015-01-01 17:26:46
when I am on PST and it is actually currently 2015-01-01 08:26:46
.
Do I have to detect and put in a users local timezone for all instances?
What gives? (I very well may have a fundamental misunderstanding of how a website gets a users local time)
Upvotes: 16
Views: 42366
Reputation: 1398
For anyone else wondering why (sometimes) Carbon::now() results different than new DateTime() :
Running the following...
public function time()
{
$date = Carbon::now();
echo $date;
echo "<BR>";
return $date;
}
made me understand what's going on. It printed:
2020-09-09 18:03:15
"2020-09-09T13:33:15.824992Z"
The first one is correct and its timezone is the one set in config/app.timezone. Calling new DateTime() results the same. The second one is the result of laravel controller. It shows the date in UTC timezone. This is how laravel converts it (using Carbon's toJSON method). But the timezone of the date is correct and running:
$anotherDate = Carbon::parse('2020-09-09 18:30:00');
echo "diff_mins : " . $anotherDate->diff($date)->i;
shows:
diff_mins : 26
as expected.
Update:
Check this in case you need to change the behavior for your model serialization.
Upvotes: 2
Reputation: 21
There are two main ways to change the timezone.
Option 1
From your project root directory, open the config
directory.
Edit the app.php
file next and the timezone
value from UTC to the desired timezone from the list of available timezones.
'timezone' => 'Asia/YOUR_LOCATION',
Option 2
Make a modification in the .env
file to specify the timezone as follows:
APP_TIMEZONE='Asia/YOUR_LOCATION'
Then, add the following in the app.php
file:
'timezone' => env('APP_TIMEZONE', 'UTC'),
Finally,
php artisan config:clear
Upvotes: 1
Reputation: 1046
Change your time zone in config/app.php
'timezone' => 'YOUR TIME ZONE',
Upvotes: 9
Reputation: 207
Carbon is UTC based therefore simply doing Carbon::now()
will output the time in UTC format
You have to specify the timezone for an accurate reflection of the dateTime in your city or area.
There are two ways to do this. You can either do:
Carbon::now('PST')
OR Carbon::now('Continent/City') like (Carbon::now('America/Montreal')
for example
Upvotes: 18
Reputation: 4561
This appears to be because the timezone of your server is different to your own.
This could be caused by:
The server's timezone appears to be CET (Central European Time) which is +1 GMT, as you described.
To fix this, you should change the timezone in your php.ini
file (instructions are from the link):
php.ini
filedate.timezone = "US/Central"
Alternatively you should replace the US/Central
timezone with the desired timezone as outlined here if you wish PHP to use another timezone.
Upvotes: 11