Timezones Got You Down? Build a Laravel Converter That Just Works
Mike Birhanu

Mike Birhanu @codewithmikee

About: Scenior Laravel and Nextjs developer | API enthusiast | Sharing backend best practices

Joined:
May 17, 2025

Timezones Got You Down? Build a Laravel Converter That Just Works

Publish Date: May 17
3 1

The Problem We All Face

⏰ Your user in Tokyo picks 2 PM → New York sees 1 AM 💀

📅 Calendar exports show wrong times

🌍 DST changes break everything

Here’s how I built a converter that handles all this – and how you can clone it.


Step 1: Steal My Base Code

git clone https://github.com/codewithmikee/laravel-timezone-handler  
Enter fullscreen mode Exit fullscreen mode

Why start from scratch? This includes:

  • Pre-built service class
  • Working demo UI
  • Passing tests (mostly 😉)

Step 2: The Magic Methods

Convert Anywhere → UTC

// Static call (no user context)  
$utcTime = UserTimeZoneHandler::toUtc(  
    '2023-01-01 14:00',   
    'Asia/Tokyo'  
);  
Enter fullscreen mode Exit fullscreen mode

User-Friendly Instance Mode

// In controller  
$handler = new UserTimeZoneHandler($user->timezone);  

// All conversions use the user’s zone  
$localTime = $handler->toUserTimeZone($event->start_time);  
Enter fullscreen mode Exit fullscreen mode

Step 3: Avoid My Carbon Mistake

I wasted hours on this failed test:

public function testGoogleFormatting() {  
    $time = Carbon::parse(...); // Fails!  
}  
Enter fullscreen mode Exit fullscreen mode

Why? Laravel extends Carbon. Always use:

use Illuminate\Support\Carbon; // Not Carbon\Carbon!  
Enter fullscreen mode Exit fullscreen mode

Step 4: Add Your Secret Sauce

  1. New Calendar Provider?
// Add to formatForProvider()  
'zoom' => $utcTime->format('Ymd\THis\Z')  
Enter fullscreen mode Exit fullscreen mode
  1. Custom Time Ranges
$converted = UserTimeZoneHandler::convertTimeRanges(  
    $businessHours,  
    'America/Chicago',  
    'Europe/Paris'  
);  
Enter fullscreen mode Exit fullscreen mode

Step 5: Launch Your Demo

php artisan serve  
Enter fullscreen mode Exit fullscreen mode

Visit http://localhost:8000/timezone-converter to see:

Demo UI


Why This Works

  • ✅ Handles 597 timezones (including weird ones like Australia/Lord_Howe)
  • ✅ Tests cover DST/edge cases
  • ✅ No hidden dependencies

Clone & Customize:

github.com/codewithmikee/laravel-timezone-handler

Comments 1 total

  • Lovit
    LovitMay 17, 2025

    Thanks for sharing 🙌

Add comment