Браузеры либо используют системные настройки для форматов даты, либо используют свои собственные (часто ориентированные на США) настройки.
Существует метод Date.prototype.toLocaleDateString () , который должен возвращатьдата основана на текущих настройках системы, однако зависит от реализации и совершенно ненадежна из-за несовместимости между браузерами.
например, для меня 13 декабря 2011 года:
- Safari возвращает
13 December 2001
- Firefox
12/13/2011
- Опера
Tuesday December 13, 2011
- Хром
Tuesday, December 13, 2011
- IE 6
Tuesday, 13 December, 2011
Таким образом, только Safari и IE на самом деле используют системные настройки, кажется, что разработчики других браузеров слишком ленивы, безразличны или невежественны, чтобы приспособиться к пользователям из других стран.
Альтернативой является либо спросить пользователя, какой формат он предпочитает, либо просто использовать недвусмысленный формат, например, 13 декабря 2011 года все поймут.Если вы действительно должны использовать только цифры, то формат ISO-8601 должен подойти: 2011-12-13 с дополнительным преимуществом, которое легко сортировать.
Некоторые функции, которые печатают короткую дату в приведенном вышеформаты:
// format: 2011/12/5
function shortDate1(obj) {
obj = obj || new Date();
return obj.getFullYear() + '/' + (obj.getMonth() + 1) + '/' + obj.getDate();
}
// format: 2011/12/05
// (padded single digit month and day)
function shortDate2(obj) {
function z(n) {
return (n < 10? '0' : '') + n;
}
obj = obj || new Date();
return obj.getFullYear() + '/' + z(obj.getMonth() + 1) + '/' + z(obj.getDate());
}
// format: 15-Dec-2011
function shortDate3(obj) {
obj = obj || new Date();
function z(n) {
return (n < 10? '0' : '') + n;
}
months = ['Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'];
return [z(obj.getDate()),months[obj.getMonth()],obj.getFullYear()].join('-');
}