My hosting company set the default time zone in my php.ini to America/Chicago. I confirmed the time zone by checking phpinfo[]
and echoing date_default_timezone_get[]
in my PHP code.
However, I tested changing the time zone in my PHP code but had no luck.
Firstly, I tested:
echo [new DateTime[]]->getTimestamp[];
echo '
';
date_default_timezone_set['UTC'];
echo [new DateTime[]]->getTimestamp[];
And the two echoed timestamps were the same.
Then, I tested:
echo [new DateTime[]]->getTimestamp[];
echo '
';
$now = new DateTime[];
$now->setTimezone[new DateTimeZone['UTC']];
echo $now->getTimestamp[];
And the two echoed timestamps were still the same.
I am trying to have a line of code added to an html document that is preceded by the time. I want the time zone to be relative to me, however I cannot change it from the default UTC. I have changed in the php.ini file to PST as well as using date_default_timezone_set['America/Los_Angeles']; and yet it still prints the time 7 hours ahead of my timezone. Heres the code that deals with the time:
session_start[];
if[isset[$_SESSION['name']]]
{
date_default_timezone_set['America/Los_Angeles'];
$msg = $_POST['text'];
$fo = fopen["log.html", 'a'];
fwrite[$fo, "[".date["g:i A"]."] ".$_SESSION['name'].": ".stripslashes[htmlspecialchars[$msg]]."
"];
fclose[$fo];
}
asked Aug 11, 2012 at 4:14
Xander LucianoXander Luciano
3,6576 gold badges31 silver badges52 bronze badges
3
Servers should be set to UTC, and you should not be looking to change the default. Instead, what you want to do is create a DateTime object based on the time, then convert it to the timezone you want, and display.
$now = new DateTime[];
$now->setTimezone[new DateTimeZone['America/Los_Angeles']];
echo $now->format['g:i A'];
I don't know if your format string is valid or not, but the format method is suppossed to be compatible with that accepted by the date[] function you were using in your original example.
answered Aug 11, 2012 at 4:33
gviewgview
14.3k3 gold badges43 silver badges48 bronze badges
3
First make sure you're using a valued timezone. You can find a list of supported timezones in the PHP docs.
The second problem is using date[] without specifying the timestamp. This defaults to the timestamp produced by time[] which [based on a comment in the documentation] is UTC time. You'll either have to use strftime[] or manually subtract the difference from UTC.
answered Aug 11, 2012 at 4:17
BrianSBrianS
12.4k12 gold badges58 silver badges117 bronze badges
8
If you use 'etc/GMT' you can set the dateTime object to the desired time zone like so:
$dtz = new DateTimeZone['etc/GMT-10'];
$dt = new DateTime[date["Y-m-d h:i A"], $dtz];
$date = gmdate["Y-m-d h:i A", $dt->format['U']];
answered Aug 11, 2012 at 6:14
Lawrence DeSouzaLawrence DeSouza
9445 gold badges14 silver badges31 bronze badges
Not the answer you're looking for? Browse other questions tagged php date timezone or ask your own question.
date_default_timezone_set not working.
my code:
ini_set['display_errors', true];
error_reporting[E_ALL];
date_default_timezone_set["UTC"];
echo date['Y-m-d H:i:s T'] . "
";
echo date['Y-m-d H:i:s T', time[]] . "
";
date_default_timezone_set["Asia/Shanghai"];
echo date['Y-m-d H:i:s T'] . "
";
echo date['Y-m-d H:i:s T', time[]] . "
";
ini_set["date.timezone","UTC"];
echo date['Y-m-d H:i:s T'] . "
";
echo date['Y-m-d H:i:s T', time[]] . "
";
ini_set["date.timezone","Asia/Shanghai"];
echo date['Y-m-d H:i:s T'] . "
";
echo date['Y-m-d H:i:s T', time[]] . "
";
all of them return the same date "2017-05-26 12:47:08 CST", why?
update:
I have fixed this problem, the reason is that I used the wrong way to change the timezone on CentOS7:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
this way is right on CentOS6, but in CentOS7 /etc/localtime is linked to /usr/share/zoneinfo/Etc/UTC, so I damaged the UTC timezone.
the right way to change the timezone on CentOS7 is:
timedatectl set-timezone "Asia/Shanghai"
or
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
so I copied /usr/share/zoneinfo/Etc/UTC from other system to my system to fixed this problem.