CodeIgniter Forums
Converting a user submitted date to GMT - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Using CodeIgniter (https://forum.codeigniter.com/forumdisplay.php?fid=5)
+--- Forum: General Help (https://forum.codeigniter.com/forumdisplay.php?fid=24)
+--- Thread: Converting a user submitted date to GMT (/showthread.php?tid=62305)



Converting a user submitted date to GMT - randy - 07-01-2015

Code igniter 2.x

I need to convert a form filled date and time and time zone to GMT

User submits a date field like 7/2/2015

Time field like 8:00 PM

and a timezone like: UM5

I found this page: https://ellislab.com/codeigniter/user-guide/helpers/date_helper.html

But I am still not sure how to go about this.

Thank you for your time.

Randy


RE: Converting a user submitted date to GMT - mwhitney - 07-02-2015

Honestly, I've always had trouble trying to figure out the intended method of working with the CI timezones, because there seem to be too many pieces missing to make it possible to really convert between user, application, and server timezones. For this reason, I created a very crude function (which can be placed in a MY_date_helper.php file to be loaded whenever the CI date_helper is loaded) to get a PHP timezone string from a CI timezone string. Then you can use PHP's built-in DateTime methods to convert the date/time to GMT.


RE: Converting a user submitted date to GMT - randy - 07-02-2015

Thank You. That was what I needed to get me on the right track.


RE: Converting a user submitted date to GMT - randy - 07-02-2015

Here is what I came up with.

What do you think?

PHP Code:
function convert_to_utc($date$time$tz){

 
   $standard_timezone standard_timezone($tz);

 
   $timestamp  strtotime("$date $time");

 
   $system_timezone = new DateTimeZone('UTC'); // your timezone
 
   $user_timezone = new DateTimeZone($standard_timezone); // your user's timezone
 
   $now = new DateTime(date('Y-m-d H:i:s',$timestamp), $user_timezone);

 
   $now->setTimezone($system_timezone);

 
   $utc_datetime $now->format('Y-m-d H:i:s');


 
   return array(
 
           "user_date"=>$date,
 
           "user_time"=>$time,
 
           "utc_full"=>$utc_datetime,
 
           "utc_date"=>$now->format('Y-m-d'),
 
           "utc_time"=>$now->format('H:i A'),
 
           "user_timezone"=>$tz,
 
           "user_standard_timezone"=>$standard_timezone
        
);





PHP Code:
$da $this->convert_to_utc("07/02/15","9:06 PM","UM5"); 


PHP Code:
Array
(
 
   [user_date] => 07/02/15
    
[user_time] => 9:06 PM
    
[utc_full] => 2015-07-03 01:06:00
    
[utc_date] => 2015-07-03
    
[utc_time] => 01:06 AM
    
[user_timezone] => UM5
    
[user_standard_timezone] => America/New_York




RE: Converting a user submitted date to GMT - mwhitney - 07-06-2015

You seem to have avoided most of the common pitfalls with PHP DateTimes, so I would say it looks good.


RE: Converting a user submitted date to GMT - kilishan - 07-06-2015

One thing to be wary of is the format of the date string being supplied. strtotime behaves differently depending on whether '-' or '/' is used in the date string, and can potentially cause issues getting the accurate time. I ran into this since I've done a lot of work for a client out of Manchester, UK, but I live in USA. From the PHP manual:

Quote:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

strtotime does support parsing out the timezone as part of the string, so it might work to ensure the timezone string is part of the string passed to the strtotime() function, but would need testing. For the project that I had problems on, we knew that all users would be UK area so I didn't have to explore quite that deep and ended up using DateTime::createFromFormat() where possible.