Re: [PHP] Using DateTimeZone
- From: lester@xxxxxxxxxxx (Lester Caine)
- Date: Fri, 05 Dec 2008 04:37:26 +0000
Jochem Maas wrote:
Lester Caine schreef:Documenting that may be useful ;)Lester Caine wrote:Lester Caine wrote:Completing the circle slowly ....I'm looking to tidy up things a bit by clearing out a lot of old codeOK cracked the first bit - need an '@' in place of the "U"
and switching to using the internal DateTime functions.
Information is stored in the databases UTC normalized, and we get
around the problem of getting a real tz offset by getting the users
to register it rather than simply relying on the browser. So dates
and times are displayed either UTC or user local time. The server
defaults are not relevant, as only the user details should be used.
The thing that I am having a little trouble establishing is thenew DateTime( '@'.$datetime_to_display, $dateTimeZoneUser );
correct way to take a UTC unix epoch timestamp from the data and
display it with the users timezone offset.
$dateTimeZoneUser = new DateTimeZone("user's setting");
$dateTimeUser =
new DateTime( date( "U", $datetime_to_display ), $dateTimeZoneUser );
$dateTimeUser = new DateTime( '@'.$datetime_to_display);
$dateTimeUser->setTimeZone( $dateTimeZoneUser );
But of cause the bit of the jigsaw I forgot is that this needs$date = $dateTimeUser->format( DATE_ATOM );
translating to the correct language. format does not respect 'setlocale'
setting? How do I get this translated to the users language as well as
their timezone?
DATE_ATOM is a locale independent format AFAICT.
But I switched to other formats and the bottom line seems to be that like DATE_ATOM - '@'. is timezone independent, so one has to apply the required timezone AFTER loading the 'epoch'. $dateTimeZoneUser is only used if there is no 'timezone' information contained IN the supplied time? More missing information from the documentation?
secondly, and I think this is rather odd, DateTime uses the sameYep ... a right pain converting from ADOdb Date structure and format
formatting code as date() ... which only does english, to quote:
<quote from=http://php.net/date>
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
</quote>
Along with the problem that DateTime does not handle genealogical dates either - which ADOdb::Date does.
and seeing as you don't seem to be able to retrieve the timestampThe problem is how to add daylight saving *TO* ADOdb dates
that the DateTime object represents in order to feed it to strftime()
you *** out of luck. ... well you could do something like the following
but it makes me feel like maybe one should avoid DateTime until
it's somewhat more flexible/complete:
That is without breaking anything else.
<?phpBUT what I need is the GMT/BST flag - or the equivalent in that local :(
setlocale(LC_TIME, "nl_NL.ISO8859-1");
$d = new DateTime();
echo strftime("%A, %d %B %Y", strtotime($d->format(DATE_ATOM))), "\n";
?>
I'm structuring a question on internals about the things that do not work right in DateTime ;)
--
Lester Caine - G8HFL
-----------------------------
Contact - http://lsces.co.uk/lsces/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk//
Firebird - http://www.firebirdsql.org/index.php
.
- Follow-Ups:
- Re: [PHP] Using DateTimeZone
- From: Lester Caine
- Re: [PHP] Using DateTimeZone
- References:
- Using DateTimeZone
- From: Lester Caine
- Re: [PHP] Using DateTimeZone
- From: Lester Caine
- Re: [PHP] Using DateTimeZone
- From: Lester Caine
- Re: [PHP] Using DateTimeZone
- From: Jochem Maas
- Using DateTimeZone
- Prev by Date: PHP 5.2.7 Released
- Next by Date: Re: [PHP] Will not report errors what can I do
- Previous by thread: Re: [PHP] Using DateTimeZone
- Next by thread: Re: [PHP] Using DateTimeZone
- Index(es):