renovations

This commit is contained in:
Ilya Kantor 2015-01-11 01:54:57 +03:00
parent 4b8b168fd2
commit c7d4c7e3ff
172 changed files with 869 additions and 244 deletions

View file

@ -0,0 +1,34 @@
function formatDate(date) {
var diff = new Date() - date; // разница в миллисекундах
if (diff < 1000) { // прошло менее 1 секунды
return 'только что';
}
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд
if (sec < 60) {
return sec + ' сек. назад';
}
var min = Math.floor( diff / 60000 ); // округлить diff до минут
if (min < 60) {
return min + ' мин. назад';
}
// форматировать дату, с учетом того, что месяцы начинаются с 0
var d = date;
d = [
'0'+d.getDate(),
'0'+(d.getMonth()+1),
''+d.getFullYear(),
'0'+d.getHours(),
'0'+d.getMinutes()
];
for(var i=0; i<d.length; i++) {
d[i] = d[i].slice(-2);
}
return d.slice(0,3).join('.')+' '+d.slice(3).join(':');
}

View file

@ -0,0 +1,18 @@
describe("formatDate", function() {
it("выводит дату 1мс назад как \"только что\"", function() {
assert.equal( formatDate( new Date(new Date - 1) ), 'только что' );
});
it('выводит дату "30 сек назад"', function() {
assert.equal( formatDate( new Date( new Date - 30*1000) ), "30 сек. назад" );
});
it('выводит дату "5 мин назад"', function() {
assert.equal( formatDate( new Date( new Date- 5*60*1000) ), "5 мин. назад");
});
it("выводит старую дату в формате дд.мм.гг чч:мм", function() {
assert.equal( formatDate( new Date(2014, 2, 1, 11, 22, 33) ), "01.03.14 11:22" );
});
});

View file

@ -0,0 +1,48 @@
Для того, чтобы узнать время от `date` до текущего момента - используем вычитание дат.
```js
//+ run
function formatDate(date) {
var diff = new Date() - date; // разница в миллисекундах
if (diff < 1000) { // прошло менее 1 секунды
return 'только что';
}
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд
if (sec < 60) {
return sec + ' сек. назад';
}
var min = Math.floor( diff / 60000 ); // округлить diff до минут
if (min < 60) {
return min + ' мин. назад';
}
// форматировать дату, с учетом того, что месяцы начинаются с 0
var d = date;
d = [
'0'+d.getDate(),
'0'+(d.getMonth()+1),
''+d.getFullYear(),
'0'+d.getHours(),
'0'+d.getMinutes()
];
for(var i=0; i<d.length; i++) {
d[i] = d[i].slice(-2);
}
return d.slice(0,3).join('.')+' '+d.slice(3).join(':');
}
alert( formatDate( new Date( new Date - 1) ) ); // только что
alert( formatDate( new Date( new Date - 30*1000) ) ); // 30 сек. назад
alert( formatDate( new Date( new Date- 5*60*1000) ) ); // 5 мин. назад
alert( formatDate( new Date( new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
```

View file

@ -0,0 +1,26 @@
# Относительное форматирование даты
[importance 4]
Напишите функцию `formatDate(date)`, которая форматирует дату `date` так:
<ul>
<li>Если со времени `date` прошло менее секунды, то возвращает `"только что"`.</li>
<li>Иначе если со времени `date` прошло менее минуты, то `"n сек. назад"`.</li>
<li>Иначе если прошло меньше часа, то `"m мин. назад"`.</li>
<li>Иначе полная дата в формате `"дд.мм.гг чч:мм"`.</li>
</ul>
Например:
```js
function formatDate(date) { /* ваш код */ }
alert( formatDate( new Date(new Date - 1) ) ); // "только что"
alert( formatDate( new Date(new Date - 30*1000) ) ); // "30 сек. назад"
alert( formatDate( new Date(new Date- 5*60*1000) ) ); // "5 мин. назад"
alert( formatDate( new Date(new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
```