Re: [SMARTY-DEV] Bug in smarty_modifier_date_format

From: Date: Wed, 10 Jan 2007 17:29:47 +0000
Subject: Re: [SMARTY-DEV] Bug in smarty_modifier_date_format
References: 1  Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-2928@lists.php.net to get a copy of this message
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hey, Even so strftime expects a unix timestamp ("The optional timestamp parameter is an integer Unix timestamp [...]" -- http://de.php.net/strftime). But as the manual says: "The only exception are mysql timestamps: They are also numeric only and 14 characters long (YYYYMMDDHHMMSS)" -- http://smarty.php.net/manual/en/language.modifier.date.format.php. print_r(strftime('%I', '20070101121212')); Outputs "04". Thats certainly not right. Thats why i think smarty_make_timestamp() should be called anyway. (I guess it was confusing because i was giving you a different mysql timestamp format than the manual says is allowed). Greets boots schrieb: > Hi. > > I think the manual is clear that only the numeric only version of the MySQL > timestamp is supported. > > http://smarty.php.net/manual/en/language.modifier.date.format.php > > I say it is better to use MySQL's UNIX_TIMESTAMP(foo) for other (all) cases. > > Personally, I vote against this change but I encourage others to comment. > > Best Regards! > boots > > --- Danilo Buerger <danilo@blizzz.org> wrote: > > "The TIMESTAMP data type has varying properties, depending on the MySQL > version and the SQL mode the server is running in. These properties are > described later in this section." -- > http://dev.mysql.com/doc/refman/5.0/en/datetime.html > > For example (on 5.0.16): > | Field | Type | Null | Key | Default | Extra > | > | date | timestamp | YES | | 0000-00-00 00:00:00 | > | > > But either way if its a datetime or a timestamp applying > smarty_make_timestamp to it still solves the problem. > > boots schrieb: >>>> Hi. >>>> >>>> That looks like a MySQL datetime rather than a timestamp. Otherwise, looks >>>> good. I've committed the %R fix to CVS. >>>> >>>> Thanks! >>>> >>>> boots >>>> >>>> --- Danilo Buerger <danilo@blizzz.org> wrote: >>>> >>>> Small errata: it should be smarty_make_timestamp() instead of >>>> smarty_make_time_stamp() of course. >>>> >>>> Danilo Buerger schrieb: >>>>>>> Hello list, >>>>>>> >>>>>>> when using Smarty in a Windows environment (substr(PHP_OS,0,3) == >>>>>>> 'WIN') >>>>>>> and trying to format a MySQL timestamp (0000-00-00 00:00:00) an error >>>>>>> occurs because the string is passed to strftime() without applying >>>>>>> smarty_make_time_stamp() to the string first. Another bug occurs when >>>>>>> using the %R format (which is unknown to Windows, see >>>>>>> >> >> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp)). >>>>>>> So here is the diff that should fix these problems: >>>>>>> >>>>>>> Index: smarty-2.6.16/plugins/modifier.date_format.php >>>>>>> =================================================================== >>>>>>> --- smarty-2.6.16/plugins/modifier.date_format.php (revision 84) >>>>>>> +++ smarty-2.6.16/plugins/modifier.date_format.php (working copy) >>>>>>> @@ -31,10 +31,10 @@ >>>>>>> function smarty_modifier_date_format($string, $format="%b %e, >>>>>>> %Y", >>>>>>> $default_date=null) >>>>>>> { >>>>>>> if (substr(PHP_OS,0,3) == 'WIN') { >>>>>>> - $hours = strftime('%I', $string); >>>>>>> + $hours = strftime('%I', >>>>>>> smarty_make_time_stamp($string)); >>>>>>> $short_hours = ( $hours < 10 ) ? substr( $hours, -1) : >>>>>>> $hours; >>>>>>> - $_win_from = array ('%e', '%T', >>>>>>> '%D', '%l'); >>>>>>> - $_win_to = array ('%#d', '%H:%M:%S', >>>>>>> '%m/%d/%y', >>>>>>> $short_hours); >>>>>>> + $_win_from = array ('%e', '%T', >>>>>>> '%D', '%l', >>>>>>> '%R'); >>>>>>> + $_win_to = array ('%#d', '%H:%M:%S', >>>>>>> '%m/%d/%y', >>>>>>> $short_hours, '%H:%M'); >>>>>>> $format = str_replace($_win_from, $_win_to, $format); >>>>>>> } >>>>>>> if($string != '') { >>>>>>> >>>>>>> Greets, >>>>>>> >>>>>>> Danilo Bürger >> ____________________________________________________________________________________ >>>> Do you Yahoo!? >>>> Everyone is raving about the all-new Yahoo! Mail beta. >>>> http://new.mail.yahoo.com >> - -- Smarty Development Mailing List (http://smarty.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php >> >> > __________________________________________________ > Do You Yahoo!? > Tired of spam? Yahoo! Mail has the best spam protection around > http://mail.yahoo.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFpSKKrwsg9y2CBIURAvyIAJ9Ay4fspwnhpOYf3tr5c4f7qQSrvQCgtaGi 1+x5Chm0KzeP88le6HozpdM= =9HUA -----END PGP SIGNATURE-----

« previous php.smarty.dev (#2928) next »