title: Dealing with timezones in PHP and MySQL
body: <p>I am trying to understand what exactly is responsible for changing and converting timezones and time respectively in my application stack and what is the best way to go about converting time to the required timezone in application code.</p>
  
  <p><strong>I am currently using:</strong></p>
  
  <p>Javascript/HTML font end</p>
  
  <p>Laravel PHP framework server side</p>
  
  <p>MySQL storage (Defaults to local system time for timestamps etc.)</p>
  
  <p><strong>I am of the opinion that:</strong></p>
  
  <p>MySQL can't store timezones for DateTime columns and just stores YYY:MM:DD hh:mm:ss and it's up to the developer to store the timezone in a separate column etc. and convert the stored time to user local in application code if user timezone is different. </p>
  
  <p>A PHP, Laravel application should work in and convert any DateTime instances to the timezone set with date_default_timezone_set() function.</p>
  
  <p><strong>The behaviour I am currently observing:</strong></p>
  
  <p>I post back json with object properties set with javascript date time format.  This format looks like so for me: e.g. 'Thu Jun 16 2016 18:00:00 GMT+1000 (AEST)'</p>
  
  <p>When this json data hits my server, the application framework or PHP automatically converts it to UTC, even if I put date_default_timezone_set('Australia/Sydney') in controller class or change application configuration, replacing the laravel UTC default. I suspect something is not registering ? If I was able to save time as it came from the client (without being automatically converted to UTC), I would not have to later convert it to the user local time zone if the user is in Australia/Sydney (which is most of them).</p>
  
  <p>My application stores this UTC adjusted time in the database, without actually having any record that it is UTC. Not really important of course as I can presume default of UTC.</p>
  
  <p>When records are retrieved with eloquent or DB:query, there's no automatic conversion to user timezone and it simply returns the time as it was stored (converted to UTC), requiring application code to convert it to correct timezone, else user (in Australia in my case) will be looking at UTC time as opposed to local AEST Etc.</p>
  
  <p><strong>Converting time:</strong></p>
  
  <p>Is there a hassle free way of automatically converting all retrieved UTC time from the database to the user local timezone or some specified default time zone if all users are presumed from the same timezone ? </p>
  
  <p>Ideally I want to pull out records from the database and have all the time properties adjusted to specified timezone, taking daylight savings into account. Would I have to run a for loop and convert/set each property with Carbon methods etc. ? </p>
  
  <p>If the date_default_timezone_set('Australia/Sydney') is set and working properly, should PHP be automatically converting the time property on all those objects as they are retrieved from the database ? As well as not converting time data to UTC when it hits the server ?</p>