How to add timezone in php date function

So I've checked the list of supported time zones in PHP and I was wondering how could I include them in the date() function? Thanks!

I don't want a default timezone, each user has their timezone stored in the database, I take that timezone of the user and use it. How? I know how to take it from the database, not how to use it, though.

K-Gun

11k2 gold badges54 silver badges57 bronze badges

asked Nov 29, 2013 at 15:15

1

For such task, you should really be using PHP's DateTime class. Please ignore all of the answers advising you to use date() or date_set_time_zone, it's simply bad and outdated.

I'll use pseudocode to demonstrate, so try to adjust the code to suit your needs.

Assuming that variable $tz contains string name of a valid time zone and variable $timestamp contains the timestamp you wish to format according to time zone, the code would look like this:

$tz = 'Europe/London';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
echo $dt->format('d.m.Y, H:i:s');

DateTime class is powerful, and to grasp all of its capabilities - you should devote some of your time reading about it at php.net. To answer your question fully - yes, you can adjust the time zone parameter dynamically (on each iteration while reading from db, you can create a new DateTimeZone() object).

How to add timezone in php date function

Alex

5,2357 gold badges32 silver badges47 bronze badges

answered Nov 29, 2013 at 15:34

N.B.N.B.

13.3k3 gold badges44 silver badges53 bronze badges

11

If I understood correct,You need to set time zone first like:

date_default_timezone_set('UTC');

And than you can use date function:

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

How to add timezone in php date function

COil

6,6182 gold badges43 silver badges86 bronze badges

answered Nov 29, 2013 at 15:18

How to add timezone in php date function

Suresh KamrushiSuresh Kamrushi

14.9k12 gold badges74 silver badges87 bronze badges

4

Use the DateTime class instead, as it supports timezones. The DateTime equivalent of date() is DateTime::format.

An extremely helpful wrapper for DateTime is Carbon - definitely give it a look.

You'll want to store in the database as UTC and convert on the application level.

answered Nov 29, 2013 at 15:17

ceejayozceejayoz

173k40 gold badges288 silver badges358 bronze badges

1

The answer above caused me to jump through some hoops/gotchas, so just posting the cleaner code that worked for me:

$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);

echo $dt->format('F j, Y @ G:i');

answered Sep 13, 2017 at 18:28

AndrewAndrew

16.9k11 gold badges95 silver badges107 bronze badges

It should like this:

date_default_timezone_set('America/New_York');

answered Nov 29, 2013 at 15:21

3

U can just add, timezone difference to unix timestamp. Example for Moscow (UTC+3)

echo date('d.m.Y H:i:s', time() + 3 * 60 * 60);

answered Jun 23, 2020 at 19:10

1

this works perfectly in 2019:

date('Y-m-d H:i:s',strtotime($date. ' '.$timezone)); 

answered Jul 13, 2019 at 6:57

0

Try this. You can pass either unix timestamp, or datetime string

public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Y-m-d H:i:s') 
    {
        $datetime = is_numeric($timestamp) ?
                    DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) :
                    new DateTime($timestamp, new DateTimeZone($fromTimezone));

        $datetime->setTimezone(new DateTimeZone($toTimezone));

        return $datetime->format($format);
    }

answered Oct 9, 2014 at 20:32

dzonadzona

3,0453 gold badges31 silver badges44 bronze badges

I have created this very straightforward function, and it works like a charm:

function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */            
        $date = new DateTime(date("d F Y H:i:s",$timestamp));
        $date->setTimezone(new DateTimeZone($timezone));
        $rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */
        return $rt;
    }

answered Feb 12, 2018 at 3:06

How to add timezone in php date function

I have tried the answers based on the DateTime class. While they are working, I found a much simpler solution that makes a DateTime object timezone aware at the time of creation.

$dt = new DateTime("now", new DateTimeZone('Asia/Jakarta'));
echo $dt->format("Y-m-d H:i:s");

This returns the current local time in Jakarta, Indonesia.

answered Feb 7 at 19:15

How to add timezone in php date function

Not mentioned above. You could also crate a DateTime object by providing a timestamp as string in the constructor with a leading @ sign.

$dt = new DateTime('@123456789');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('F j, Y - G:i');

See the documentation about compound formats: https://www.php.net/manual/en/datetime.formats.compound.php

answered Sep 22, 2020 at 10:10

Team EJTeam EJ

611 silver badge2 bronze badges

If you use Team EJ's answer, using T in the format string for DateTime will display a three-letter abbreviation, but you can get the long name of the timezone like this:

$date = new DateTime('2/3/2022 02:11:17');
$date->setTimezone(new DateTimeZone('America/Chicago'));

echo "\n" . $date->format('Y-m-d h:i:s T');
/* Displays 2022-02-03 02:11:17 CST "; */

$t = $date->getTimezone();
echo "\nTimezone: " . $t->getName();
/* Displays Timezone: America/Chicago */

answered Dec 27, 2021 at 0:02

Bob RayBob Ray

9089 silver badges20 bronze badges

$now = new DateTime();
$now->format('d-m-Y H:i:s T')

Will output:

29-12-2021 12:38:15 UTC

answered Dec 29, 2021 at 12:24

How to add timezone in php date function

Based on other answers I built a one-liner, where I suppose you need current date time. It's easy to adjust if you need a different timestamp.

$dt = (new DateTime("now", new DateTimeZone('Europe/Rome')))->format('d-m-Y_His');

answered Apr 20 at 13:43

How to add timezone in php date function

Kar.maKar.ma

6636 silver badges12 bronze badges

I had a weird problem on a hosting. The timezone was set correctly, when I checked it with the following code.

echo ini_get('date.timezone');

However, the time it returned was UTC.

The solution was using the following code since the timezone was set correctly in the PHP configuration.

date_default_timezone_set(ini_get('date.timezone'));

answered May 25 at 7:59

How to add timezone in php date function

B. MartinB. Martin

1,00010 silver badges17 bronze badges

You can replace database value in date_default_timezone_set function, date_default_timezone_set(SOME_PHP_VARIABLE); but just needs to take care of exact values relevant to the timezones.

answered Nov 29, 2013 at 15:37

How to add timezone in php date function

What is the use of date_default_timezone_set ()?

The date_default_timezone_set() function sets the default timezone used by all date/time functions in the script.

Where is PHP timezone set?

8 Answers.
Go to your phpinfo() page and search for Loaded Configuration File and open the php. ini file mentioned under that section..
Change the default timezone settings by adding your new timezone by modifying this line: date. timezone=Asia/Kolkata ..
Save the php. ... .
Restart the Apache server..

What timezone is UTC for PHP?

The default timezone for PHP is UTC regardless of your server's timezone. This is the timezone used by all PHP date/time functions in your scripts. See PHP's list of supported timezones to find the names of all possible timezones you can use for the date. timezone setting.

How can I modify the PHP timezone setting for my website?

Open Hosting → Manage → PHP Configuration page. There, open the PHP options tab and edit the date. timezone value: If you are not sure which time zone to insert, check the Time Zone Map.