renovations

This commit is contained in:
Ilya Kantor 2015-03-22 00:36:11 +03:00
parent c108f03596
commit 9122b131d0
12 changed files with 580 additions and 52 deletions

View file

@ -0,0 +1,28 @@
function formatDate(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 (Array.isArray(date)) {
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;
return formattedDate;
}

View file

@ -0,0 +1,18 @@
describe("formatDate", function() {
it("читает дату вида гггг-мм-дд из строки", function() {
assert.equal(formatDate('2011-10-02'), "02.10.11");
});
it("читает дату из числа 1234567890 (миллисекунды)", function() {
assert.equal(formatDate(1234567890), "14.02.09");
});
it("читает дату из массива вида [гггг, м, д]", function() {
assert.equal(formatDate([2014, 0, 1]), "01.01.14");
});
it("читает дату из объекта Date", function() {
assert.equal(formatDate(new Date(2014, 0, 1)), "01.01.14");
});
});

View file

@ -0,0 +1,15 @@
Для определения примитивного типа строка/число подойдет оператор [typeof](#type-typeof).
Примеры его работы:
```js
//+ run
alert( typeof 123 ); // "number"
alert( typeof "строка" ); // "string"
alert( typeof new Date() ); // "object"
alert( typeof [] ); // "object"
```
Оператор `typeof` не умеет различать разные типы объектов, они для него все на одно лицо: `"object"`. Поэтому он не сможет отличить `Date` от `Array`.
Для отличия `Array` используем вызов `Array.isArray`. Если он неверен, значит у нас дата.

View file

@ -0,0 +1,26 @@
# Полиморфная функция formatDate
[importance 5]
Напишите функцию `formatDate(date)`, которая возвращает дату в формате `dd.mm.yy`.
Ее первый аргумент должен содержать дату в одном из видов:
<ol>
<li>Как объект `Date`.</li>
<li>Как строку в формате `yyyy-mm-dd`.</li>
<li>Как число *секунд* с `01.01.1970`.</li>
<li>Как массив `[гггг, мм, дд]`, месяц начинается с нуля</li>
</ol>
Для этого вам понадобится определить тип данных аргумента и, при необходимости, преобразовать входные данные в нужный формат.
Пример работы:
```js
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
```