PHP timezone issue | BST and GMT

Eclipse picture Eclipse · May 27, 2015 · Viewed 12.4k times · Source

I have developed a piece of application which records when certain records where modified and created, so basically we take use of the time() function to record when a change is saved.

I am in the UK so my time-zone has to be GMT. However in the UK we use DST so in the summer we are no longer in GMT but in BST.

How would I change the timezone to be using BST (which is GMT +1). I would like to declare it in my php file so that it is easily changed. Here is what I have at the moment:

date_default_timezone_set("UTC");

When I change it to:

date_default_timezone_set("BST");

I get a php error Timezone ID 'BST' is invalid, and when I change it to Europe/London, it still stays as GMT rather then BST

Answer

deceze picture deceze · May 27, 2015

You would be setting your timezone to Europe/London, which automatically transitions between GMT and BST at the appropriate dates. The timezone includes this information, that's basically the point of timezones (in the PHP sense).

The PHP manual handily includes exactly this as a sample:

$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions();
print_r(array_slice($transitions, 0, 3));

Array
(
    [0] => Array
        (
            [ts] => -9223372036854775808
            [time] => -292277022657-01-27T08:29:52+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [1] => Array
        (
            [ts] => -1691964000
            [time] => 1916-05-21T02:00:00+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [2] => Array
        (
            [ts] => -1680472800
            [time] => 1916-10-01T02:00:00+0000
            [offset] => 0
            [isdst] => 
            [abbr] => GMT
        )

)