> -----Original Message----- > From: DL Neil [mailto:[EMAIL PROTECTED]] > Sent: 09 December 2002 10:50
[snip...] > =now let's take a look at the UNIX Epoch. Various > 'quotations' have surfaced > in this email, and I don't recall that it is well discussed > within the PHP > manual (it being a UNIX definition after all...). The epoch 'began' > 1Jan1970, sure enough (exactly as quoted). HOWEVER it is defined as > beginning at Greenwich: 1Jan1970 at midnight UTC in Greenwich... > > =So a timestamp of 'zero' in London (UTC) would see the east coast of > Australia at 39600 local (TZ of +1100 (hours)). Er -- no, I think you've got that backwards. Unix timestamps are, as you rightly say, seconds since 00:00 1-Jan-1970 GMT, so, at any instant, the Unix timestamp is the same at every point on the globe. It's only the *local* *times* (on the server, of course) that change. So, the Unix timestamp of 0 represents: 00:00 1-Jan-1970 GMT 19:00 31-Dec-1969 on the east coast of Canada/USA (5 hours behind GMT) 09:30 1-Jan-1970 in Australia's Northern Territory (9.5 hour ahead of GMT -- I know this one 'cos my sister lives there!) >From this, you can see why the same time stamp might give you different dates if your servers are in different timezones -- espacially ones as widely different as Australia and Canada! > =if at that very time I was in London and you in TZ+1100 and > we waited one > hour, the asked for the current timestamp: I would get 3600 > and you 43200. Again, no: if I, at 01:00 local in GMT, and he at 12:00 local in a GMT+1100 timezone -- that is, the very same instant -- both asked for the current UNIX timestamp, we would both get the same answer. > =The reality is that everyone works off UTC (NB "GMT" whilst widely > used/terminology within PHP is not the "internationally PC term") - > including the (alert) Americans - the US military > refers/referred to UTC/GMT > as "Zulu time" (which has more to do with the alphabet than > warriors). So if > I'm in Germany and I'm phoning you early/late in the day, to > avoid holding > our conversation in a less socially-acceptable climate I > would first compare > my time against UTC (+0100) and then compare your time > against UTC (+1100), > do the math to get a difference of +10 hours, add that to my > local time, and > thereafter place/delay the call... (try doing this > calculation based upon > something like Indian Standard Time, and add a Daylight > Saving/Summer-Time > adjustment into the mix, just for 'fun'!?) Well, the time/date functions provided in PHP can do all this for you. > =In conclusion, (based upon my, cough, cough, many years of > wrestling with > this sort of thing) make all stored times UTC (gm*()) Yes -- as the Unix timestamp is an *absolute*, always expressed in GMT regardless of where you are (or, rather, where your server is!), this is the one to use as your base. > - the > RDBMS should not > 'filter' timestamps - MySQL does not (for example), and then > if you want > 'local' times you can 'do the math' for either the server's > TZ or (if you're > really masochistic (?is that the word?)) the browser-client's > local time. > The 'silver lining' is that you can now easily accommodate temporal > input/presentations to/from anyone, anywhere in the world - > it is also easy > to produce code to calculate the server's local time (for > example), so that > the same routine works regardless of where the server is > located - where > next year's new 'mirror' is to be located, anywhere in the world! To amplify on this: Doing a strtotime() or a mktime() will assume you are expressing the date/time in the local (to the server) timezone, and do necessary adjustments to produce your GMT-based Unix timestamp (unless, that is, you pass a string to strtotime() which contains a timezone expression such as EST or -0500!); gmmktime will assume you are providing a GMT date/time and make no such adjustment. Similarly, in the reverse direction, date() will take the GMT-based timestamp, adjust it for local timezone and DST, if any, and then format the result; gmdate simply formats the timestamp, thus expressing it in GMT. I, too have wrestled with this quite a lot before eventually coming to this understanding -- not helped by my location, which means that for half the year I'm in GMT and so can't see the local effect of any corrections I'm applying!!! Cheers! Mike --------------------------------------------------------------------- Mike Ford, Electronic Information Services Adviser, Learning Support Services, Learning & Information Services, JG125, James Graham Building, Leeds Metropolitan University, Beckett Park, LEEDS, LS6 3QS, United Kingdom Email: [EMAIL PROTECTED] Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php