DEV Community

Mike Birhanu
Mike Birhanu

Posted on

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

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

Top comments (1)

Collapse
 
lovit_js profile image
Lovit

Thanks for sharing πŸ™Œ