Re: Bug in smarty_modifier_date_format

boots <[email protected]> Wed, 10 Jan 2007 10:12:12 -0800 (PST)
Newsgroups gmane.comp.php.smarty.devel
Message-ID <[email protected]>
Hi.

You convinced me and I have updated CVS accordingly.

Thanks a second time!

boots

--- Danilo Buerger <[email protected]> wrote:
> -----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 <[email protected]> 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 <[email protected]> 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
> >>
> - --
> Smarty Development Mailing List (http://smarty.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
> -----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-----
> 



 
____________________________________________________________________________________
Yahoo! Music Unlimited
Access over 1 million songs.
http://music.yahoo.com/unlimited

-- 
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php