Полиморфная функция formatDate
важность: 5
Напишите функцию formatDate(date)
, которая возвращает дату в формате dd.mm.yy
.
Её первый аргумент должен содержать дату в одном из видов:
- Как объект
Date
. - Как строку, например
yyyy-mm-dd
или другую в стандартном формате даты. - Как число секунд с
01.01.1970
. - Как массив
[гггг, мм, дд]
, месяц начинается с нуля
Для этого вам понадобится определить тип данных аргумента и, при необходимости, преобразовать входные данные в нужный формат.
Пример работы:
function formatDate(date) { /* ваш код */ }
alert( formatDate('2011-10-02') ); // 02.10.11
alert( formatDate(1234567890) ); // 14.02.09
alert( formatDate([2014, 0, 1]) ); // 01.01.14
alert( formatDate(new Date(2014, 0, 1)) ); // 01.01.14
Для определения примитивного типа строка/число подойдёт оператор typeof.
Примеры его работы:
alert( typeof 123 ); // "number"
alert( typeof "строка" ); // "string"
alert( typeof new Date() ); // "object"
alert( typeof [] ); // "object"
Оператор typeof
не умеет различать разные типы объектов, они для него все на одно лицо: "object"
. Поэтому он не сможет отличить Date
от Array
.
Для отличия Array
используем вызов Array.isArray
. Если он неверен, значит у нас дата.
function formatDate(date) {
if (typeof date == 'number') {
// перевести секунды в миллисекунды и преобразовать к Date
date = new Date(date * 1000);
} else if (typeof date == 'string') {
// строка в стандартном формате автоматически будет разобрана в дату
date = new Date(date);
} else if (Array.isArray(date)) {
date = new Date(date[0], date[1], date[2]);
}
// преобразования для поддержки полиморфизма завершены,
// теперь мы работаем с датой (форматируем её)
return date.toLocaleString("ru", {day: '2-digit', month: '2-digit', year: '2-digit'});
/*
// можно и вручную, если лень добавлять в старый IE поддержку локализации
var day = date.getDate();
if (day < 10) day = '0' + day;
var month = date.getMonth() + 1;
if (month < 10) month = '0' + month;
// взять 2 последние цифры года
var year = date.getFullYear() % 100;
if (year < 10) year = '0' + year;
var formattedDate = day + '.' + month + '.' + year;
return formattedDate;
*/
}