David Graham wrote on 20 Nov 2003:
[color=blue]
>
> "Michael Winter" <M.Winter@blueyonder.co.uk.invalid> wrote in
> message news:Xns94399B8E9E578MWinterBlueyonder@193.38.113. 46...[color=green]
>> David Graham wrote on 20 Nov 2003:
>>[color=darkred]
>> > Hi
>> > I have asked this question in alt.php as the time() function
>> > as used in setcookie belongs to php - or does it belong
>> > equally in the javascript camp - bit confused about that.
>> > Anyway, can anyone here put me straight on the following:
>> >
>> > I had a look at the time() function came across this:
>> >
>> > "To clarify, it seems this function returns the time of the
>> > computer's clock and does not do any timezone adjustments to
>> > return GMT, so you are given the local time. The description
>> > says that it's supposed to return the number of seconds from
>> > 1970 12am GMT, when the seconds are actually counted from
>> > 12am in the computer's local time.
>> >
>> > Hope it saves some confusion. "
>> >
>> > This seems to be saying that the time() function retreaves
>> > the date in seconds from 1970 12a.m from the users pc clock.
>> > This is great for me, it means I don't need to worry about
>> > time zones. My cookie will expire in 60seconds (time() + 60)
>> > regardless of where the user lives. Have I interpreted things
>> > correctly?[/color]
>>
>> It seems to me that it's saying it returns the client's local
>> time, and not GMT/UTC, so you *will* have to worry about
>> time-zones: cookie expiry dates *must* be in GMT/UTC, not local
>> time. However, you can use the PHP function, gmdate():
>>
>> // Returns the current date and time, in GMT, in the (cookie)
>> format: // Wdy, DD-Mon-YY HH:MM:SS GMT
>> //
>> gmdate( "D, d-M-Y H:i:s \G\M\T", time());
>>
>> In JavaScript, you'd just use the Date.toUTCString() method.
>>
>> Hope that helps,
>>
>> Mike
>>
>> --
>> Michael Winter
>>
M.Winter@blueyonder.co.uk.invalid (remove ".invalid" to reply)[/color]
>
> Hi
> Why is nothing ever simple.
> I have been to the php manual to look up details on gmdate()
> function. I note something about the function being broken in MS
> Windows OS - is this a serious problem, if so I will stay clear
> of this function. I have pasted the line below from the maual
>
> header("Expires: ".gmdate("D, d M Y H:i:s", time() + 3600)."
> GMT");
>
> I think this is saying - get the corrected date and time - i.e.
> whatever the local time may be, correct it to GMT. Then the
> second argument is get the lapsed seconds since 1970 Jan 1st and
> add an hours worth of seconds to this (time that cookie exists
> for). Then I get confused as to how this helps me in setcookie()
> to set a cookie expire time. Obviously, when I use this stuff
> for real I will strip away the header() bit and the concatonated
> strings at the start and finish. But the actual detail of how
> that second argument combines with the GMT to set an expire time
> is something I'm not getting at the moment. Need a bit more help
> please to understand this. David[/color]
I just looked at the comments on those functions in the PHP online
documentation. It seems that you missed one comment, and
misinterpreted (sort of) your most recent concern:
The poster that suggested time() returns values relative to local
time was apparently mistaken. The comment immediately above it claims
that time() is correct, and the mistaken poster was probably using
date() (which adjusts a timestamp to local time) to display the
return value. I would have suggested that you try it for yourself,
but I see that we're both in the UK, so date() and gmdate() would
return the same time for us. I wrote a small test page and tried
changing my time-zone settings, but it was determined to return
everything in GMT, so I was unable to verify anything.
The problem with a Windows server and gmdate() is when you pass
negative timestamps. This would only be a problem if you intend to
parse dates before 01-Jan-1970 00:00:00 GMT (UNIX Epoch). There is no
way of getting around this (date() too is limited to dates after the
UNIX Epoch).
About the date formatting, use my string ("D, d-M-Y H:i:s \G\M\T") as
it is guaranteed to be the correct format. The 'T' format specifier
could return any string that infers GMT. During my test with gmdate()
and date(), 'T' returned 'GMT Standard Time' - it depends upon the
operating system.
In a nutshell, you needn't really worry about the concerns you've
raised, unless you want to use a date before the UNIX Epoch, and then
there's nothing you can do about it directly anyway. The safest way
would be to use a host that runs Unix or Linux: they're free from
that particular error.
Mike
--
Michael Winter
M.Winter@blueyonder.co.uk.invalid (remove ".invalid" to reply)