|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-03-10 20:32 UTC] robertbienert at gmx dot net
Description:
------------
As of PHP 5, the date() function does not support 'O' anymore. Instead you have got to hack around with DateTime and Timezone objects (that seem to be undocumented, though), but there is nothing about it in the documentation, and PHP 5 is already some years old.
Reproduce code:
---------------
My current hack (written as comment to the date functions manual) follows:
$dt = new DateTime();
$tz = $dt->getTimezone();
$hours = sprintf('%02d', (int)$tz->getOffset($dt) / 3600);
$mins = sprintf('%02d', $tz->getOffset($dt) % 3600);
$sign = $tz->getOffset($dt) > 0 ? '+' : '-';
echo $sign, $hours, $mins;
Expected result:
----------------
The code above works as expected, but I would also expect that the date() manual tells me, that 'O' does not work anymore on PHP 5, why it does not work _and_ what the new way is.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2026 The PHP GroupAll rights reserved. |
Last updated: Wed Jun 17 21:00:02 2026 UTC |
Well, my error handler caught a E_COMPAT when using date('O') on PHP 5. The message told be to use the TZ environment variable or code like I presented.OK, my fault, the error is called E_STRICT (int value 2048). And here follows a snippet from my code that emitted and caught the "error": <?php // custom error handler function error($no, $msg, $file, $line) { $msg = str_replace(array("\t", "\r\n", "\n", "\r"), ' ', $msg); echo 'Error (', $no, '): ', $msg, ' in ', $file, ' @line ', $line, "\n"; exit; } set_error_handler('error'); echo 'PHP version: ', PHP_VERSION, "\n"; // is 5.2.0-8+etch10 for me // now calling date to get _only_ the timezone offset $offset = date('O'); // this line is never reached (because of the exit, but it is a usual way to exit on errors): echo 'current timezone offset: ', $offset, "\n"; ?> The (plain) error message from PHP 5 follows: date(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead And it is E_STRICT as my error handler reports (got it in the $no variable). Hope this helps reproducing things.