Skip to content
Enable user Timezones in your application.
Branch: master
Clone or download
Latest commit 64d6018 May 22, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Fix wrong parameter on blade directive. (#1) Aug 4, 2018
.gitattributes Initial Commit Jul 30, 2018
.gitignore Removing redundant composer.lock file Jul 31, 2018
.php_cs Updating config Jul 31, 2018
Makefile Adding php codesniffer and config Jul 31, 2018
README.md Formatting update May 22, 2019
composer.json Update the required version of Carbon May 11, 2019

README.md

Laravel Timezone

Packagist Packagist Packagist

An easy way to set a timezone for a user in your application and then show date/times to them in their local timezone.

How does it work

This package listens for the \Illuminate\Auth\Events\Login event and will then automatically set a timezone on your user model (stored in the database).

This package uses the torann/geoip package which looks up the users location based on their IP address. The package also returns information like the users currency and users timezone. You can configure this package separately if you require.

How to use

You can show dates to your user in their timezone by using

{{ Timezone::convertToLocal($post->created_at) }}

Or use our nice blade directive

@displayDate($post->created_at)

More examples below

Installation

Pull in the package using Composer

composer require jamesmills/laravel-timezone

Run the database migrations. This will add a timezone column to your users table.

php artisan migrate

Flash Messages

By default when the timezone has been set there is a flash message set in the session. There is an optional integration to use laracasts/flash package if you wish. Just publish the config options (info below) and override the default settings.

Custom Configuration

Publishing the config file is optional.

There isn't much to configure right now. You only need to do this if you want to use Laracast Flash Messages

php artisan vendor:publish --provider="JamesMills\LaravelTimezone\LaravelTimezoneServiceProvider" --tag=config

If you wish to customise the underlying torann/geoip package you can publish the config file by using the command below.

php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config

Examples

Showing date/time to the user in their timezone

Default will use the format jS F Y g:i:a and will not show the timezone

{{ Timezone::convertToLocal($post->created_at) }}

// 4th July 2018 3:32:am

If you wish you can set a custom format and also include a nice version of the timezone

{{ Timezone::convertToLocal($post->created_at, 'Y-m-d g:i', true) }}

// 2018-07-04 3:32 New York, America

Using blade directive

Making your life easier one small step at a time

@displayDate($post->created_at)

// 4th July 2018 3:32:am

And with custom formatting

@displayDate($post->created_at, 'Y-m-d g:i', true)

// 2018-07-04 3:32 New York, America

Saving the users input to the database in UTC

This will take a date/time, set it to the users timezone then return it as UTC in a Carbon instance.

$post = Post::create([
    'publish_at' => Timezone::convertFromLocal($request->get('publish_at')),
    'description' => $request->input('description'),
]);

Issues

If you receive a message like This cache store does not support tagging this is because the torann/geoip package requires a caching driver which supports tagging and you probably have your application set to use the file cache driver. You can publish the config file for the torann/geoip package and set 'cache_tags' => null, to solve this. Read more about this issue here.

You can’t perform that action at this time.