blob: d14e850906779bfc29f38820cf69ba5139c3aa73 [file] [log] [blame]
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*global intl_DateTimeFormat: false, */
var dateTimeFormatCache = new Record();
/**
* Format this Date object into a date and time string, using the locale and
* formatting options provided.
*
* Spec: ECMAScript Language Specification, 5.1 edition, 15.9.5.5.
* Spec: ECMAScript Internationalization API Specification, 13.3.1.
*/
function Date_toLocaleString() {
// Steps 1-2. Note that valueOf enforces "this time value" restrictions.
var x = callFunction(std_Date_valueOf, this);
if (std_isNaN(x))
return "Invalid Date";
// Steps 3-4.
var locales = arguments.length > 0 ? arguments[0] : undefined;
var options = arguments.length > 1 ? arguments[1] : undefined;
// Step 5-6.
var dateTimeFormat;
if (locales === undefined && options === undefined) {
// This cache only optimizes for the old ES5 toLocaleString without
// locales and options.
if (dateTimeFormatCache.dateTimeFormat === undefined) {
options = ToDateTimeOptions(options, "any", "all");
dateTimeFormatCache.dateTimeFormat = intl_DateTimeFormat(locales, options);
}
dateTimeFormat = dateTimeFormatCache.dateTimeFormat;
} else {
options = ToDateTimeOptions(options, "any", "all");
dateTimeFormat = intl_DateTimeFormat(locales, options);
}
// Step 7.
return intl_FormatDateTime(dateTimeFormat, x);
}
/**
* Format this Date object into a date string, using the locale and formatting
* options provided.
*
* Spec: ECMAScript Language Specification, 5.1 edition, 15.9.5.6.
* Spec: ECMAScript Internationalization API Specification, 13.3.2.
*/
function Date_toLocaleDateString() {
// Steps 1-2. Note that valueOf enforces "this time value" restrictions.
var x = callFunction(std_Date_valueOf, this);
if (std_isNaN(x))
return "Invalid Date";
// Steps 3-4.
var locales = arguments.length > 0 ? arguments[0] : undefined;
var options = arguments.length > 1 ? arguments[1] : undefined;
// Step 5-6.
var dateTimeFormat;
if (locales === undefined && options === undefined) {
// This cache only optimizes for the old ES5 toLocaleDateString without
// locales and options.
if (dateTimeFormatCache.dateFormat === undefined) {
options = ToDateTimeOptions(options, "date", "date");
dateTimeFormatCache.dateFormat = intl_DateTimeFormat(locales, options);
}
dateTimeFormat = dateTimeFormatCache.dateFormat;
} else {
options = ToDateTimeOptions(options, "date", "date");
dateTimeFormat = intl_DateTimeFormat(locales, options);
}
// Step 7.
return intl_FormatDateTime(dateTimeFormat, x);
}
/**
* Format this Date object into a time string, using the locale and formatting
* options provided.
*
* Spec: ECMAScript Language Specification, 5.1 edition, 15.9.5.7.
* Spec: ECMAScript Internationalization API Specification, 13.3.3.
*/
function Date_toLocaleTimeString() {
// Steps 1-2. Note that valueOf enforces "this time value" restrictions.
var x = callFunction(std_Date_valueOf, this);
if (std_isNaN(x))
return "Invalid Date";
// Steps 3-4.
var locales = arguments.length > 0 ? arguments[0] : undefined;
var options = arguments.length > 1 ? arguments[1] : undefined;
// Step 5-6.
var dateTimeFormat;
if (locales === undefined && options === undefined) {
// This cache only optimizes for the old ES5 toLocaleTimeString without
// locales and options.
if (dateTimeFormatCache.timeFormat === undefined) {
options = ToDateTimeOptions(options, "time", "time");
dateTimeFormatCache.timeFormat = intl_DateTimeFormat(locales, options);
}
dateTimeFormat = dateTimeFormatCache.timeFormat;
} else {
options = ToDateTimeOptions(options, "time", "time");
dateTimeFormat = intl_DateTimeFormat(locales, options);
}
// Step 7.
return intl_FormatDateTime(dateTimeFormat, x);
}