Skip to content

Instantly share code, notes, and snippets.

View dannetstudio's full-sized avatar

Daniel Ignacio Fernández dannetstudio

View GitHub Profile
@dannetstudio
dannetstudio / datetimezone.blade.php
Created October 6, 2022 18:03
Laravel blade timezone component examples.
<x-date-time-zone :date="$model->created_at" />
<x-date-time-zone :date="$model->created_at" format="d-m-Y H:i:s"/>
<x-date-time-zone :date="$model->created_at" format="d/m/Y<\b\r>H:i"/>
@dannetstudio
dannetstudio / DateTimeZone.php
Created October 6, 2022 18:02
Laravel Blade Component for Dates with the user’s timezone
<?php
namespace App\View\Components;
use App\Helpers\Helpers;
use Carbon\Carbon;
use Illuminate\View\Component;
class DateTimeZone extends Component
{
public Carbon $date;
public mixed $format;
/**
@dannetstudio
dannetstudio / getCreatedAtAttribute.php
Created October 6, 2022 18:00
Models user timezone Accessors
<?php
public function getCreatedAtAttribute($value): Carbon
{
return Carbon::parse($value)->timezone(Helpers::getUserTimeZone());
}
public function getUpdatedAtAttribute($value): Carbon
{
return Carbon::parse($value)->timezone(Helpers::getUserTimeZone());
}
@dannetstudio
dannetstudio / timezone_request_merge.php
Created October 6, 2022 17:54
Laravel user timezone defined request merge.
<?php
$request->merge([
'created_at' => Carbon::parse($request->input('created_at'), Helpers::getUserTimeZone())
->setTimeZone(config('app.timezone'))
->format('Y-m-d H:i:s'),
]);
@dannetstudio
dannetstudio / timezone-moment.html
Created October 6, 2022 17:53
Laravel timezone javascript moment example
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.33/moment-timezone-with-data.min.js"></script>
<script>
$(document).ready(function() {
console.log(moment.tz.guess());
});
</script>
@dannetstudio
dannetstudio / timezone_dropdown.blade.php
Created October 6, 2022 17:51
Laravel user timezone selection blade
<div class="col-md-4">
<label class="required" for="timezone">{{ __('TimeZone') }}</label>
<select class="form-control" name="timezone" id="timezone">
@foreach(Helpers::getTimeZoneList() as $timezone => $timezone_gmt_diff)
<option value="{{ $timezone }}" {{ ( $timezone === old('timezone', $user->timezone)) ? 'selected' : '' }}>
{{ $timezone_gmt_diff }}
</option>
@endforeach
</select>
</div>
@dannetstudio
dannetstudio / getUserTimeZone.php
Created October 6, 2022 17:48
getUserTimeZone Helper
<?php
static public function getUserTimeZone() {
return optional(auth()->user())->timezone ?? config('app.timezone');
}
@dannetstudio
dannetstudio / getTimeZoneList.php
Created October 6, 2022 17:46
getTimeZoneList Helper
<?php
static public function getTimeZoneList()
{
return \Cache::rememberForever('timezones_list_collection', function () {
$timestamp = time();
foreach (timezone_identifiers_list(\DateTimeZone::ALL) as $key => $value) {
date_default_timezone_set($value);
$timezone[$value] = $value . ' (UTC ' . date('P', $timestamp) . ')';
}
return collect($timezone)->sortKeys();
@dannetstudio
dannetstudio / Helpers.php
Created October 6, 2022 17:45
Laravel Helper file structure
<?php
namespace App\Helpers;
use Illuminate\Support\Facades\App;
class Helpers {
//...
}
@dannetstudio
dannetstudio / setTimeZoneAttribute.php
Created October 6, 2022 17:39
setTimeZoneAttribute Mutator
<?php
public function setTimeZoneAttribute($value) {
$this->attributes['timezone'] = $value == config('app.timezone') || is_null($value) ? null : $value;
}