If throwing an exception from Date.prototype.toLocaleString is allowed, then I think that would be the best solution. I thought that would be considered an incompatible change since the spec doesn't mention it and no implementation (that I've tested with) does it.
Norbert On Jun 22, 2012, at 9:25 , Allen Wirfs-Brock wrote: > #3 is also the alternative that seems right to me although since the "Invalid > Date" behavior isn't in the standard and also isn't universal we could change > the behavior of Date toLocaleString for ES6 and in the I18N API spec. to also > throw. > > "Invalid Date" doesn't seems to me like a debugging message and not something > that requires or is intended for end-user localization. doesn't seems -> seems? > Allen > > > > > On Jun 21, 2012, at 10:33 PM, Brendan Eich wrote: > >> Eric Albright wrote: >>> I think detection of programming errors is important enough that I favor >>> option 3. Next in line is option 1. >> >> Agreed. >> >> /be >>> >>> ________________________________________ >>> From: [email protected] [[email protected]] on >>> behalf of Norbert Lindenberg [[email protected]] >>> Sent: Thursday, June 21, 2012 4:23 PM >>> To: es-discuss >>> Subject: Internationalization: NaN and Infinity in date formatting >>> >>> The ECMAScript Internationalization API Specification currently requires >>> that Intl.DateTimeFormat.prototype.format(date) throws an exception if >>> ToNumber(date) is not a finite Number (i.e., it's NaN or +/- Infinity). >>> This is incompatible with the specification of >>> Date.prototype.toLocale(|Date|Time)String, which unconditionally requires >>> that a String value is returned. >>> >>> Most existing implementations of Date.prototype.toLocale(|Date|Time)String >>> return "Invalid Date" for NaN (Infinity is mapped to NaN in the Date >>> constructor). Safari tries to produce something in the format of a date >>> string, with limited success: >>> Mac OS 10.6.8: "December -2147483629, 1969 -596:-31:-23 GMT-08:00" >>> iOS 5.1.1 German: "1. Januar 1970 00:00:00 GMT-07:52:58" >>> >>> Internationalization libraries usually use integer-based representations of >>> date and time and therefore don't deal with NaN and Infinity. >>> >>> I see the following options: >>> >>> 1) Change Intl.DateTimeFormat.prototype.format to return a localized form >>> of "Invalid Date" for non-finite values. Pro: Most compatible with current >>> implementations. Con: Internationalization libraries probably don't provide >>> these localized strings, so the wrapper implementing the ECMAScript >>> Internationalization API has to provide them. >>> >>> 2) Change Intl.DateTimeFormat.prototype.format to return >>> Intl.NumberFormat.prototype.format(ToNumber(date)) for non-finite values. >>> Pro: Relies on existing functionality. Con: Less descriptive and less >>> compatible than 1. >>> >>> 3) Leave Intl.DateTimeFormat.prototype.format as is (i.e., throw an >>> exception for non-finite values); specify >>> Date.prototype.toLocale(|Date|Time)String to handle NaN directly before >>> calling Intl.DateTimeFormat.prototype.format with other values. Pro: Easier >>> detection of programming errors when using format(). Con: format() and >>> toLocaleString() start to drift apart. >>> >>> I lean towards option 1). >>> >>> Comments? >>> >>> Thanks, >>> Norbert >>> >>> _______________________________________________ >>> es-discuss mailing list >>> [email protected] >>> https://mail.mozilla.org/listinfo/es-discuss >>> _______________________________________________ >>> es-discuss mailing list >>> [email protected] >>> https://mail.mozilla.org/listinfo/es-discuss >>> >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss >> > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

