How to change Timezone in Laravel? [3 Methods]


Laravel

Author: Steve Alila
Reviewer: Deepak Prasad

In this tutorial, we will discuss how to change the time zone in Laravel, an essential aspect of building applications that cater to a diverse, global user base. Time zone management is crucial for displaying accurate date and time information to users and ensuring the proper functioning of features like scheduling, reminders, or event tracking.

By default, Laravel uses the UTC time zone, which may not be suitable for all applications. Therefore, it is important to know how to configure the time zone according to your application's requirements or the preferences of your users.

Throughout this tutorial, we will guide you through the process of changing the default time zone in Laravel, discuss the benefits of using the correct time zone, and demonstrate how to handle user-specific time zones dynamically. We will cover different methods for setting the time zone, including application-wide configuration, runtime configuration, and user-specific settings.

By the end of this tutorial, you will have a solid understanding of how to change the time zone in Laravel and ensure that your application displays accurate date and time information for users across different geographic regions. This knowledge will help you build more robust and user-friendly applications, enhancing the overall user experience.

 

Different methods to change Timezone in Laravel

Method-1: Application-wide configuration

To set the time zone for the entire application, you can update the 'timezone' configuration option in the config/app.php file. Replace the default 'UTC' value with the desired time zone, as shown below:

<?php

use Illuminate\Support\Facades\Facade;

return [
  ...
    'timezone' => 'Asia/Kolkata',
  ...
];

Make sure to use a valid PHP time zone string (http://php.net/manual/en/timezones.php).

I have changed my time zone from the default UTC to Asia/Kolkata.

change time zone in Laravel

 

Change time zone in the .env and config/app.php files then clear the config.

// .env file
APP_TIMEZONE="Asia/Kolkata"

// config/app.php file
'timezone' => env('APP_TIMEZONE', 'UTC'),

Set the app time zone to UTC in the .env file then effect the changes in the config/app.php file. Lastly, clear the config.

php artisan config:clear

How to change Timezone in Laravel? [3 Methods]

 

Method-2: Runtime configuration

Instead of manually changing the time zone for the entire Laravel application, you can do it for a specific task only. That is where the PHP's date_default_timezone_set(<time zone>) method comes in.

All you do is pass a time zone (string) argument to the method in a controller or view.

date_default_timezone_set('Asia/Kolkata');

How to change Timezone in Laravel? [3 Methods]

Note: You should clear the Laravel cache if the change does not occur.

php artisan cache:clear
php artisan config:clear

 

Method-3: User-specific time zones

In cases where you want to display date and time information based on the user's preferences or location, you can store the user's time zone in the database and apply it dynamically. To achieve this, follow these steps:

a. Add a 'timezone' column to your 'users' table and store the user's preferred time zone.

You can create a new migration to add the 'timezone' column to your 'users' table:

php artisan make:migration add_timezone_to_users_table --table=users

In the generated migration file, add the 'timezone' column:

// database/migrations/<timestamp>_add_timezone_to_users_table.php

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('timezone')->default('UTC');
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('timezone');
    });
}

Run the migration:

php artisan migrate

b. Create a middleware that sets the time zone based on the authenticated user's preference:

php artisan make:middleware SetUserTimezone

In the generated middleware file, set the time zone using the authenticated user's preference:

// app/Http/Middleware/SetUserTimezone.php

use Closure;
use Illuminate\Support\Facades\Auth;

public function handle($request, Closure $next)
{
    if (Auth::check()) {
        date_default_timezone_set(Auth::user()->timezone);
    }

    return $next($request);
}

c. Register the middleware:

Add the middleware to the app/Http/Kernel.php file within the web middleware group. This will ensure it is applied to all web routes.

// app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        // ...
        \App\Http\Middleware\SetUserTimezone::class,
    ],

    // ...
];

Now, the time zone will be set according to the authenticated user's preference, ensuring that date and time information is displayed accurately for each user.

 

Verify the new time zone setting and time

The last step is to confirm the changes. You can do that using the PHP's date_default_timezone_get() method or the Carbon class' now() method. 

Time zone

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    dd(date_default_timezone_get());
    return view('welcome');
});

The date_default_timezone_get() method returns the time zone.

 

Time and Time Zone

You can also confirm you are in the new time zone by checking the time using the Carbon class' now().

<?php

use Carbon\Carbon;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    dd(Carbon::now());
    return view('welcome');
});

I have imported the Carbon class use Carbon\Carbon and used its now() method to print the current time. 

How to change Timezone in Laravel? [3 Methods]

The output is a full date showing the time, time zone and duration away from the UTC time.

 

Summary

In this tutorial, we discussed different methods to change timezone in Laravel, an essential aspect of developing applications that cater to users worldwide. Accurate time zone management is vital for displaying correct date and time information and ensuring the proper functioning of features like scheduling, reminders, or event tracking.

We explored three primary methods for changing the time zone in Laravel:

  1. Application-wide configuration: Setting the time zone in the config/app.php file to change the default time zone for the entire application.
  2. Runtime configuration: Using the date_default_timezone_set() function to change the time zone during runtime for specific tasks or processes.
  3. User-specific time zones: Storing the user's preferred time zone in the database and applying it dynamically using custom middleware.

Each method serves a distinct purpose, allowing you to manage the time zone based on your application's requirements and user preferences. By understanding and implementing these methods, you can ensure that your application displays accurate date and time information for users across different geographic regions, thereby enhancing the overall user experience.

You can then verify the new time zone using PHP's date_default_timezone_get() method or Laravel's Carbon class.

 

Steve Alila

Steve Alila

He specializes in web design, WordPress development, and data analysis, with proficiency in Python, JavaScript, and data extraction tools. Additionally, he excels in web API development, AI integration, and data presentation using Matplotlib and Plotly. You can connect with him on his LinkedIn profile.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment