Edit report at http://bugs.php.net/bug.php?id=53939&edit=1

 ID:                 53939
 User updated by:    igor at wiedler dot ch
 Reported by:        igor at wiedler dot ch
 Summary:            [intl] IntlDateFormatter::format fails to escape M
                     in "'y-'M"
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            *Languages/Translation
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

Invalid, closing.


Previous Comments:
------------------------------------------------------------------------
[2011-02-08 11:18:50] igor at wiedler dot ch

I discovered this in the ICU documentation:



> Any characters in the pattern that are not in the ranges of ['a'..'z']
and 

['A'..'Z'] will be treated as quoted text. For instance, characters like
':', 

'.', ' ', '#' and '@' will appear in the resulting time text even they
are not 

enclosed within single quotes.The single quote is used to 'escape'
letters. Two 

single quotes in a row, whether inside or outside a quoted sequence,
represent a 

'real' single quote.



Example:



> yyyy.MM.dd G 'at' HH:mm:ss zzz

> 1996.07.10 AD at 15:08:56 PDT



http://userguide.icu-project.org/formatparse/datetime



So the escaping is always between two quote characters, and not an
escape 

character before each escaped character (like with date).



Thus, this report is invalid and may be closed.

------------------------------------------------------------------------
[2011-02-06 18:02:45] igor at wiedler dot ch

Oops, the last expected is of course:



string(1) "n-M"

------------------------------------------------------------------------
[2011-02-06 17:52:33] igor at wiedler dot ch

Perhaps also worth noting:



Script:



$fmt = new IntlDateFormatter('en' ,IntlDateFormatter::FULL, 

IntlDateFormatter::FULL,

    'UTC', IntlDateFormatter::GREGORIAN  ,"WTF 'y-'M");

var_dump($fmt->format(0));



$fmt = new IntlDateFormatter('en' ,IntlDateFormatter::FULL, 

IntlDateFormatter::FULL,

    'UTC', IntlDateFormatter::GREGORIAN  ,"n-'M");

var_dump($fmt->format(0));





Actual:



string(1) "0"

string(1) "-"





Expected:



string(1) "0T1 1970-1"

string(1) "n-1"

------------------------------------------------------------------------
[2011-02-06 17:42:28] igor at wiedler dot ch

Description:
------------
When calling IntlDateFormatter::format with the format "'y-'M-'d", it
fails to 

escape the M properly. ' is the escape character of ICU's dateformat.

Test script:
---------------
<?php

$fmt = new IntlDateFormatter('en' ,IntlDateFormatter::FULL,
IntlDateFormatter::FULL,

    'UTC', IntlDateFormatter::GREGORIAN  ,"M");

var_dump($fmt->format(0));

    

$fmt = new IntlDateFormatter('en' ,IntlDateFormatter::FULL,
IntlDateFormatter::FULL,

    'UTC', IntlDateFormatter::GREGORIAN  ,"'M");

var_dump($fmt->format(0));



$fmt = new IntlDateFormatter('en' ,IntlDateFormatter::FULL,
IntlDateFormatter::FULL,

    'UTC', IntlDateFormatter::GREGORIAN  ,"'y-'M");

var_dump($fmt->format(0));

Expected result:
----------------
string(1) "1"

string(1) "M"

string(3) "y-M"

Actual result:
--------------
string(1) "1"

string(1) "M"

string(3) "y-1"


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53939&edit=1

Reply via email to