[drupal-devel] [bug] function format_date uses gmdate() incorrectly

killes drupal-devel at drupal.org
Sat Sep 10 03:05:30 UTC 2005

Issue status update for 
Post a follow up: 

 Project:      Drupal
 Version:      cvs
 Component:    base system
 Category:     bug reports
 Priority:     normal
 Assigned to:  thehunmonkgroup
 Reported by:  thehunmonkgroup
 Updated by:   killes at www.drop.org
-Status:       patch (code needs review)
+Status:       patch (ready to be committed)

I think it is obvious that the display function is overcorrecting. 

At the top of the function we correct for Drupal server time or user tz
and then wwe later again shift the zone.

print date('D, M jS, G:i', time()-date('Z'));

print gmdate('D, M jS, G:i', time());

this code gives the same for me and shows that the timestmap is further

killes at www.drop.org

Previous comments:

Thu, 25 Aug 2005 22:04:51 +0000 : thehunmonkgroup

Attachment: http://drupal.org/files/issues/format_date.patch (817 bytes)

function format_date in common.inc is using gmdate() incorrectly.  the
function is trying to format a local timestamp, and GMT conversion is
incorrect in this case.  date() should be used instead.  bug also
exists in 4.6, and this patch should apply there, too.  haven't checked
the earlier versions of drupal...


Sat, 27 Aug 2005 04:47:39 +0000 : thehunmonkgroup

switching to patch status


Sat, 03 Sep 2005 23:05:37 +0000 : clydefrog

Are you sure about the logic here? I've tried to fix timezone issues
before, and I always get confused. My reading of the documentation
makes me think your patch is wrong:

If the timestamp has already been converted to a localized time, then
gmdate() should be used because gmdate() does no timezone adjustments
(it does not care what PHP's timezone settings are). Using date() is
incorrect because it does care what PHP's timezone settings are.


Sun, 04 Sep 2005 04:21:12 +0000 : thehunmonkgroup

i'm fairly certain that my logic is correct here.  the php doc on
gmdate() is not totally clear, but i think that if you read it over
closely, you'll see that it's the other way around--gmdate() is
actually the one that adjusts the timestamp passed.  i would recommend
writing some short scripts to test out how gmdate() and date() actually
operate(that's what i had to do!)--i think you'll see that what happens
is gmdate() takes the timestamp passed, applies the server timezone
offset, and returns the (formatted) result as GMT.  that's what my
tests have shown, and for the format_date function, this operation is
incorrect--the goal of the function is to simply make the timestamp
passed into a human-readable date.  no adjustment is necessary.

More information about the drupal-devel mailing list