Code first
echo time() . '<br/>';
echo date('Y-m-d H:i:s') . '<br/>';
date_default_timezone_set('America/New_York');
echo time() . '<br/>';
print_r($timezones[$timezone] . '<br/>');
echo date('Y-m-d H:i:s') . '<br/>';
In the above code the date is printed according to timezone but unix timestamp is same even after setting default timezone
How can we print unix timestamp according to timezone?
The answer provided by Volkerk is correct, but if you really need a work around look at my example.
Get the regular timestamp and add the UTC offset
https://en.wikipedia.org/wiki/Unix_time
The unix timestamp isn't affected by a timezone setting. Setting the timezone only affects the interpretation of the timestamp value.
Had the same issue myself, and this is the easiest approach I could do fairly quickly.
Saw the answers with the offset solution and I think that unless you save you times in the database in UTC or Unix timestamp they won't help. The problem, when it comes to getTimestamp(), is that the timezone is not considered even when you initiate the object... How do I explain it :)... let's say you have some event with date and time in you db. You also have you timezone correctly configured. I'll put these in vars for this example, so it's more visible:
Now...when you do this, you pass the datetime and your timezone to the constructor. What you would expect is that php respects your timezone and you get UTC timestamp that corresponds to 16:45 in Berlin which would be UTC 15:45 in winter and UTC 14:45 in summer. It won't happen - what you get is timestamp corresponding to UTC 16:45. If you add the offset now you will be hour or two off.
The correct way to do this is to initiate the object, set/switch timezones, create a formatted datetime which respects the timezone and then get timestamp from the formatted datetime. It might be a bit slower, but it's timezone fail prove: