For EST time, I've set:
date_default_timezone_set("America/New_York");
As the page loads, I'm getting EST time via:
$time = time();
The problem is when I convert strings back and forth between timestamps and datetime format:
10/31/2012 7:30pm 1351729800 | 10/31/2012, 8:30 pm
11/2/2012 7:30pm 1351902600 | 11/02/2012, 8:30 pm
11/3/2012 8:00pm 1351990800 | 11/03/2012, 9:00 pm
11/7/2012 8:00pm 1352336400 | 11/07/2012, 8:00 pm
11/9/2012 8:00pm 1352509200 | 11/09/2012, 8:00 pm
11/10/2012 8:00pm 1352595600 | 11/10/2012, 8:00 pm
I'm expecting these date & times to be the same.
The first section (before the "|") is simply strings, such as "10/31/2012 7:30pm" and the strtotime("10/31/2012 7:30pm EST").
The section (after the "|") is date() of the previous strtotime() value.
What can I do to convert from string to time (strtotime) and double check that the date format returned is the same as the string input?
Thanks
I'd say that this is because currently New York is on daylight savings time - EDT rather than EST. This affects things like so:
date_default_timezone_set("America/New_York");
strtotime("10/31/2012 7:30pm"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EDT"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EST"); // translates to "Wed, 31 Oct 2012 20:30:00 -0400"
The quick fix is probably to not add the timezone to the string, strtotime()
will use the correct default timezone you set.
You can be a bit more exact about how your date is being parsed by using the DateTime
createFromFormat
function:
$date = DateTime::createFromFormat('m/d/Y g:ia', "10/31/2012 7:30pm");
echo $date->format('U');
Alternatively if you wait until November the problem will resolve itself :-)
Some times you need to set and forget a time in a PHP script and moving to a new server could change your hard work. if you are doing date with string to time for example add your time zone code to your string like New Yourk wiht daylight savings time: 'EDT'
echo date('g:i a',strtotime('10:59 EDT'));// 10:59 am
or if you want to extract the amount of seconds an specific time has, lets say 10:59pm, use something like:
echo gmdate('g:i a',strtotime('January 1 1970 10:59pm GMT'));//82740 seconds //converted to 10:59pm
the latter will give you (12+10 hours(*60) and 59 minutes)*60 in seconds, and the gmdate function will echo the GMT time from what ever seconds you pass to the function.. if you try date instead you will, most likely, not get 10:59 unless you live in the GMT time zone (Greenwich Mean Time).
This time zone stuff can get very confusing, so be very careful and mess around with it when having a very specific plan..like converting someones time to yours, etc.