7

In PHP, how do I get the current time, in UTC, without hard coding knowledge of where my hosting provider is?

For example, I tried the following:

time() + strtotime('January 1, 2000')-strtotime('January 1, 2000 UTC')

and find that it reports a time that is one hour ahead of actual UTC time. I tried this on two different hosting providers in two different time zones with the same results.

Is there a reliable (and, hopefully, cleaner) way to accurately get the UTC time?

I am limited to PHP 4.4.9 so I cannot use the new timezone stuff added to PHP5.

Thanks, in advance.

Dave
  • 83
  • 1
  • 5
  • Just to check, are the hosting providers in the same time zone as you are? You might try checking the output of date("T") to see. – Tom Sep 23 '09 at 04:33
  • 1
    @Tom: That would work if the OP can assume his provider is in a certain region. The problem with `date("T")` is that for example "EST" might by the North American EST or the Australian EST. – MitMaro Sep 23 '09 at 04:46
  • I was just fishing for information. See my answer below for a solution that would appear to work in all cases. Your point about time zone abrev. is well taken and something that I've never had to deal with since all my servers are in the U.S. – Tom Sep 23 '09 at 04:49

4 Answers4

13
$time = new DateTime('now', new DateTimeZone('UTC'));
echo $time->format('F j, Y H:i:s');
GZipp
  • 5,386
  • 1
  • 22
  • 18
8

This seems to work for me. Of course, you'll need to test it on PHP 4 since all of my servers have PHP 5, but the manual claims this should work for PHP 4.

$t = time();
$x = $t+date("Z",$t);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $x);

First time around, I forgot that the date could change between the call to time() and date().

Tom
  • 776
  • 1
  • 5
  • 12
0
$utcTtime = gmmktime();
$unixTimestamp = time();

gmmktime: Get Unix timestamp for a GMT date

Timo Huovinen
  • 53,325
  • 33
  • 152
  • 143
Stefan Gehrig
  • 82,642
  • 24
  • 155
  • 189
0

Does this work for php 4.4.9?

echo gmdate('Y-m-d H:i:s', time());

or if you want it for a specific date:

$time = strtotime('January 1, 2000 UTC');
if($time){
    echo gmdate('Y-m-d H:i:s', $time);
}
Timo Huovinen
  • 53,325
  • 33
  • 152
  • 143