Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Полиморфная функция outputDate

Напишите функцию outputDate(date), которая выводит дату в формате dd.mm.yy.

Ее первый аргумент должен содержать дату в одном из видов:

  1. Как объект Date.
  2. Как строку в формате yyyy-mm-dd.
  3. Как число секунд с 01.01.1970.
  4. Как массив [гггг, мм, дд], месяц начинается с нуля

Для этого вам понадобится определить тип данных аргумента и, при необходимости, преобразовать входные данные в нужный формат.

Пример работы:

function outputDate(date) { /* ваш код */ 

outputDate( '2011-10-02' );  // 02.10.11
outputDate( 1234567890 );  // 14.02.09
outputDate( [2000,0,1] ); // 01.01.00
outputDate( new Date(2000,0,1) ); // 01.01.00

Решение
Решение

Для определения примитивного типа строка/число подойдет оператор typeof.

Примеры его работы:

alert(typeof 123); // "number"
alert(typeof "строка"); // "string"
alert(typeof new Date()); // "object"
alert(typeof []); // "object"

Оператор typeof не умеет различать разные типы объектов, они для него все на одно лицо: "object". Поэтому он не сможет отличить Date от Array.

Используем для того, чтобы их различать, свойство [[Class]].

Функция:

function outputDate(date) {
  if (typeof date == 'number') {
    // перевести секунды в миллисекунды и преобразовать к Date
    date = new Date(date*1000);
  } else if(typeof date == 'string') {
    // разобрать строку и преобразовать к Date
    date = date.split('-');
    date = new Date(date[0], date[1]-1, date[2]);
  } else if ( {}.toString.call(date) == '[object Array]' ) {
    date = new Date(date[0], date[1], date[2]);
  }

  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;

  alert(formattedDate);
}

outputDate( '2011-10-02' );  // 02.10.11
outputDate( 1234567890 );  // 14.02.09
outputDate( [2000,0,1] ); // 01.01.00
outputDate( new Date(2000,0,1) ); // 01.01.00

#359
Наверх

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!