Search code examples
phpdategmt

how to convert php date formats to GMT and vice versa?


i am new to php. i want to write a function where i need user to input date in any date format including DST,into GMT format and again later back into the original entered format.please any body help me.


Solution

  • Although the gmdate functions are available. If you are using PHP 5.2 or greater, then consider using the DateTime object.

    Here's code to switch to GMT

    $date = new DateTime();
    $date->setTimezone(new DateTimeZone('GMT'));
    

    and back to the default timezone...

    $date = new DateTime('2011-01-01', new DateTimeZone('GMT'));
    $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
    

    Using the DateTime object lets your create a datetime, just like the procedural functions, except that you keep a reference to an instance.

    e.g.

    // Get a reference to Christmas of 2011, at lunch time.
    $date = new DateTime('2011-12-25 13:00:00');
    
    // Print the date for people to see, in whatever format we specify.
    echo $date->format('D jS M y');
    
    // Change the timezone to GMT.
    $date->setTimezone(new DateTimeZone('GMT'));
    
    // Now print the date/time it would in the GMT timezone
    // as opposed to the default timezone it was created with.
    echo $date->format('Y-m-d H:i:s');
    
    // Just to show of some more, get the previous Sunday
    $date->modify('previous Sunday');
    

    There's a whole lot of functions you can use, that are much more readable that the procedural functions.


    Explicit example of converting from a timezone to GMT

    $melbourne = new DateTimeZone('Australia/Melbourne');
    $gmt = new DateTimeZone('GMT');
    
    $date = new DateTime('2011-12-25 00:00:00', $melbourne);
    $date->setTimezone($gmt);
    echo $date->format('Y-m-d H:i:s');
    // Output: 2011-12-24 13:00:00
    // At midnight on Christmas eve in Melbourne it will be 1pm on Christmas Eve GMT.
    
    echo '<br/>';
    
    // Convert it back to Australia/Melbourne
    $date->setTimezone($melbourne);
    echo $date->format('Y-m-d H:i:s');
    

    Using your Asia/Kolkata to America/New_York

    date_default_timezone_set('Asia/Kolkata');
    $date = new DateTime('2011-03-28 13:00:00');
    $date->setTimezone(new DateTimeZone('America/New_York'));
    echo $date->format("Y-m-d H:i:s");
    //Outputs: 2011-03-28 03:30:00