I found a solution to convert time to local time using a session. The current time zone offset will be stored in the session to calculate user time. Create a jquery post function to offset the user's time zone for the session. This is my code,
default.blade.php
@if($current_time_zone=Session::get('current_time_zone'))@endif <input type="hidden" id="hd_current_time_zone" value="{{{$current_time_zone}}}"> // For assigning session value to hidden field. <script type="text/javascript"> $(document).ready(function(){ if($('#hd_current_time_zone').val() ==""){ // Check for hidden field is empty. if is it empty only execute the post function var current_date = new Date(); curent_zone = -current_date.getTimezoneOffset() * 60; var token = "{{csrf_token()}}"; $.ajax({ method: "POST", url: "{{URL::to('ajax/set_current_time_zone/')}}", data: { '_token':token, curent_zone: curent_zone } }).done(function( data ){ }); } });
routes.php
Route::post('ajax/set_current_time_zone', array('as' => 'ajaxsetcurrenttimezone','uses' => ' HomeController@setCurrentTimeZone '));
HomeController.php
public function setCurrentTimeZone(){ //To set the current timezone offset in session $input = Input::all(); if(!empty($input)){ $current_time_zone = Input::get('curent_zone'); Session::put('current_time_zone', $current_time_zone); } }
helpers /helper.php
function niceShort($attr) { if(Session::has('current_time_zone')){ $current_time_zone = Session::get('current_time_zone'); $utc = strtotime($attr)-date('Z'); // Convert the time zone to GMT 0. If the server time is what ever no problem. $attr = $utc+$current_time_zone; // Convert the time to local time $attr = date("Ymd H:i:s", $attr); } return attr; }
index.blade.php
{{ niceShort($posts->updated_at) }}
Now we can print the time in the customers time zone. The time zone configuration code is only triggered when the session is empty.
source share