14

I've seen a few questions about this but not a clear answer... strtotime() will use the default timezone set for PHP when converting the string to a unix timestamp.

However, I want to convert a string to unix timestamp in UTC. Since there is no parameter for doing so, how can this be done?

The string I'm trying to convert is: 2011-10-27T20:23:39, which is already in UTC. I want to represent that as a unix timestamp also in UTC.

Thank you

1

3 Answers 3

25

I realize this question is very old, but I found another option that can be helpful. Instead of setting and then reverting php's time zone, you can specify the timezone as a part of the string you pass to strtotime like so:

echo date_default_timezone_get(); output: America/Chicago echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39')); output: 2011-10-28 01:23:39 echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 America/Chicago')); output: 2011-10-28 01:23:39 echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 UTC')); output 2011-10-27 20:23:39 

Note: I am on PHP 5.5.9, but this should work in any php version.

Sign up to request clarification or add additional context in comments.

1 Comment

This is easier but you have to watch out for user input. If you just sending in what a user has typed you never know if they are going to include the timezone or something that will mess the string up.
11

Set the system default timezone before making the strtotime call:

date_default_timezone_set('UTC'); echo strtotime('2011-10-27T20:23:39')."\n"; // Proof: print_r(getdate(strtotime('2011-10-27T20:23:39'))); // IMPORTANT: It's possible that you will want to // restore the previous system timezone value here. // It would need to have been saved with // date_default_timezone_get(). 

See it in action.

2 Comments

Would that cause issues with the rest of the script though? I guess I could set it back afterwards?
@Brian: It could cause issues, yes. But as long as you set it back there will be no problem.
8

Both other answers are really fine. As I have the same issue, I want to offer a third option.

$utc = new DateTimeZone('UTC'); $dt = new DateTime('2011-10-27T20:23:39', $utc); var_dump($dt->format('U')); 

gives string(10) "1319747019"

3 Comments

This does not work if there is a timezone present in the datetime string.
Maybe, but this is a solution for the question. Additionally, what's different from the other solutions!? In all other cases, a present timezone can lead to unwanted result.
Using DateTimeZone as Parameter suggests that it would always use this timezone.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.