Closed
Bug 296302
Opened 19 years ago
Closed 9 years ago
Date.prototype.toLocaleString ( ) returns incorrectly formatted dates in languages using genitive month names
Categories
(Core :: JavaScript: Internationalization API, defect)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: alexg, Unassigned)
References
()
Details
Attachments
(5 files)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b2) Gecko/20050531 Firefox/1.0+
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b2) Gecko/20050531 Firefox/1.0+
Date.prototype.toLocaleString() returns '21 Май 2005 г. 14:32:52' for the day of
May, 21th, 2005 when the Regional Options in Control Panel are set to 'Russian'.
The date should be read as '21 мая 2005 г.'. Note lowercase letter for the month
name and the different declensional ending.
Reproducible: Always
Steps to Reproduce:
var d = new Date(1116711172);
alert(d.toLocaleString());
Actual Results:
21 Май 2005 г. 14:32:52
Expected Results:
21 мая 2005 г. 14:32:52
Comment 1•19 years ago
|
||
Comment 2•19 years ago
|
||
Comment 3•19 years ago
|
||
Comment 4•19 years ago
|
||
Updated•19 years ago
|
Comment 5•19 years ago
|
||
The current implementation of toLocaleString ( ),
http://lxr.mozilla.org/mozilla/source/js/src/jsdate.c#1789 ,
contains:
return date_toLocaleHelper(cx, obj, argc, argv, rval,
#if defined(_WIN32) && !defined(__MWERKS__)
"%#c"
#else
"%c"
#endif
which effectively causes call to strftime from <time.h> using "%#c", not "%c"
argument. Note that %c means "The preferred date and time representation for the
current locale."
Now that special treatment of windows appeared after the following commit:
date: 1998/04/24 00:29:56; author: fur; state: Exp; lines: +160 -93
Initial checkin of JavaScript 1.3, migrated from JSFUN13_BRANCH in /m/src reposi
tory
Perhaps nowdays the standard %c works on Windows properly? Can anybody with
Windows check this?
Comment 6•19 years ago
|
||
The patch removes special treatment of Windows in date_toLocaleString and
date_toLocaleDateString so only ANSI C standard format strings are used.
Anybody with Windows and MSVC dares to try it?
Updated•19 years ago
|
Attachment #185096 -
Attachment description: march 1 - msie alert → may 21 - msie alert
Updated•19 years ago
|
Attachment #185098 -
Attachment description: march 1 - deer park alert → may 21 - deer park alert
Comment 7•19 years ago
|
||
This is not limited to Russian.
For Polish it's e.g. "kwiecien" vs "kwietnia", similar problems probably appears with other languages using genitive forms of month names in full dates.
Summary: Date.prototype.toLocaleString ( ) returns incorrectly fomatted date in Russian language → Date.prototype.toLocaleString ( ) returns incorrectly fomatted dates in languages using genitive month names
Updated•19 years ago
|
Summary: Date.prototype.toLocaleString ( ) returns incorrectly fomatted dates in languages using genitive month names → Date.prototype.toLocaleString ( ) returns incorrectly formatted dates in languages using genitive month names
This still reproduces with Firefox 3.6 Beta 4. Also, toLocaleDateString has the same problem.
For what it is worth, nsIScriptableDateFormat with dateFormatLong returns the correct string, at least in Russian.
> var datefmtsvc = Components.classes['@mozilla.org/intl/scriptabledateformat;1']
> .getService(Components.interfaces.nsIScriptableDateFormat);
> var str = datefmtsvc.FormatDateTime('ru',
> datefmtsvc.dateFormatLong, datefmtsvc.timeFormatSeconds,
> 2005, 5, 21, 14, 32, 52);
> // ==> '21 мая 2005 г. 14:32:52'
(In reply to comment #6)
> The patch removes special treatment of Windows in date_toLocaleString and
> date_toLocaleDateString so only ANSI C standard format strings are used.
> Anybody with Windows and MSVC dares to try it?
I am not trying to compile Firefox with this patch, but according to the documentation on the MSDN Library,
http://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
"%c" uses the short representation and "%#c" uses the long representation on Windows.
When the locale is set to Russian, strftime returns as follows:
%c: "21.05.2005 14:32:52" (short form, seemingly correct)
%#c: "21 Май 2005 г. 14:32:52" (long form, incorrect)
I am not sure whether we should switch from "%#c" to "%c" because it probably changes the behavior in almost all locales.
Comment 10•15 years ago
|
||
In my opinion, Date.prototype.toLocaleDateString should behave in the same way as nsIScriptableDateFormat.FormatDate with the first argument set to the empty string and the second argument set to either dateFormatLong or dateFormatShort. Why do they behave differently? nsIScriptableDateFormat.FormatDate seems to use genitive month names correctly (see also comment #8).
Assignee | ||
Updated•10 years ago
|
Assignee: general → nobody
Comment 11•9 years ago
|
||
No longer reproducible in current Firefox (39), probably fixed when Intl API was enabled. Resolving as WFM.
Tests:
new Date("2015-05-21T14:32:52").toLocaleString("ru")
"21.05.2015, 14:32:52"
new Date("2015-05-21T14:32:52").toLocaleString("ru", {year: "numeric", month: "short", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"})
"21 мая 2015 г., 14:32:52"
Status: NEW → RESOLVED
Closed: 9 years ago
Component: JavaScript Engine → JavaScript: Internationalization API
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•