translated
This commit is contained in:
parent
0818e61927
commit
deead6c11e
32 changed files with 193 additions and 297 deletions
|
@ -1,9 +1,8 @@
|
|||
Дата в местной временной зоне создается при помощи `new Date`.
|
||||
The `new Date` constructor uses the local time zone by default. So the only important thing to remember is that months start from zero.
|
||||
|
||||
Месяцы начинаются с нуля, так что февраль имеет номер 1. Параметры можно указывать с точностью до минут:
|
||||
So February has number 1.
|
||||
|
||||
```js run
|
||||
var d = new Date(2012, 1, 20, 3, 12);
|
||||
let d = new Date(2012, 1, 20, 3, 12);
|
||||
alert( d );
|
||||
```
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ importance: 5
|
|||
|
||||
---
|
||||
|
||||
# Создайте дату
|
||||
# Create a date
|
||||
|
||||
Создайте объект `Date` для даты: 20 февраля 2012 года, 3 часа 12 минут.
|
||||
Create a `Date` object for the date: Feb 20, 2012, 3:12am. The time zone is local.
|
||||
|
||||
Временная зона -- местная. Выведите его на экран.
|
||||
Show it using `alert`.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
function getWeekDay(date) {
|
||||
var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
|
||||
var days = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
|
||||
|
||||
return days[date.getDay()];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
describe("getWeekDay", function() {
|
||||
it("3 января 2014 - пятница", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 3)), 'пт');
|
||||
it("3 January 2014 - friday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 3)), 'FR');
|
||||
});
|
||||
|
||||
it("4 января 2014 - суббота", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 4)), 'сб');
|
||||
it("4 January 2014 - saturday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 4)), 'SA');
|
||||
});
|
||||
|
||||
it("5 января 2014 - воскресенье", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 5)), 'вс');
|
||||
it("5 January 2014 - sunday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 5)), 'SU');
|
||||
});
|
||||
|
||||
it("6 января 2014 - понедельник", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 6)), 'пн');
|
||||
it("6 January 2014 - monday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 6)), 'MO');
|
||||
});
|
||||
|
||||
it("7 января 2014 - вторник", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 7)), 'вт');
|
||||
it("7 January 2014 - tuesday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 7)), 'TU');
|
||||
});
|
||||
|
||||
it("8 января 2014 - среда", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 8)), 'ср');
|
||||
it("8 January 2014 - wednesday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 8)), 'WE');
|
||||
});
|
||||
|
||||
it("9 января 2014 - четверг", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 9)), 'чт');
|
||||
it("9 January 2014 - thursday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 9)), 'TH');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,20 +1,14 @@
|
|||
Метод `getDay()` позволяет получить номер дня недели, начиная с воскресенья.
|
||||
The method `date.getDay()` returns the number of the weekday, starting from sunday.
|
||||
|
||||
Запишем имена дней недели в массив, чтобы можно было их достать по номеру:
|
||||
Let's make an array of weekdays, so that we can get the proper day name by its number:
|
||||
|
||||
```js run
|
||||
function getWeekDay(date) {
|
||||
var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
|
||||
let days = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
|
||||
|
||||
return days[date.getDay()];
|
||||
}
|
||||
|
||||
var date = new Date(2014, 0, 3); // 3 января 2014
|
||||
alert( getWeekDay(date) ); // 'пт'
|
||||
```
|
||||
|
||||
В современных браузерах можно использовать и `toLocaleString`:
|
||||
```js run
|
||||
var date = new Date(2014, 0, 3); // 3 января 2014
|
||||
alert( date.toLocaleString('ru', {weekday: 'short'}) ); // 'Пт'
|
||||
let date = new Date(2014, 0, 3); // 3 Jan 2014
|
||||
alert( getWeekDay(date) ); // FR
|
||||
```
|
||||
|
|
|
@ -2,14 +2,13 @@ importance: 5
|
|||
|
||||
---
|
||||
|
||||
# Имя дня недели
|
||||
# Show a weekday
|
||||
|
||||
Создайте функцию `getWeekDay(date)`, которая выводит текущий день недели в коротком формате 'пн', 'вт', ... 'вс'.
|
||||
Write a function `getWeekDay(date)` to show the weekday in short format: 'MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'.
|
||||
|
||||
Например:
|
||||
For instance:
|
||||
|
||||
```js no-beautify
|
||||
var date = new Date(2012,0,3); // 3 января 2012
|
||||
alert( getWeekDay(date) ); // Должно вывести 'вт'
|
||||
let date = new Date(2012, 0, 3); // 3 Jan 2012
|
||||
alert( getWeekDay(date) ); // should output "TU"
|
||||
```
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@ function getLocalDay(date) {
|
|||
|
||||
var day = date.getDay();
|
||||
|
||||
if (day == 0) { // день 0 становится 7
|
||||
if (day == 0) { // weekday 0 (sunday) is 7 in european
|
||||
day = 7;
|
||||
}
|
||||
|
||||
return day;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
describe("getLocalDay возвращает день недели", function() {
|
||||
it("3 января 2014 - пятница", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 3)), 5);
|
||||
describe("getLocalDay returns the \"european\" weekday", function() {
|
||||
it("3 January 2014 - friday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 3)), 5);
|
||||
});
|
||||
|
||||
it("4 января 2014 - суббота", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 4)), 6);
|
||||
it("4 January 2014 - saturday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 4)), 6);
|
||||
});
|
||||
|
||||
it("5 января 2014 - воскресенье", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 5)), 7);
|
||||
it("5 January 2014 - sunday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 5)), 7);
|
||||
});
|
||||
|
||||
it("6 января 2014 - понедельник", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 6)), 1);
|
||||
it("6 January 2014 - monday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 6)), 1);
|
||||
});
|
||||
|
||||
it("7 января 2014 - вторник", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 7)), 2);
|
||||
it("7 January 2014 - tuesday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 7)), 2);
|
||||
});
|
||||
|
||||
it("8 января 2014 - среда", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 8)), 3);
|
||||
it("8 January 2014 - wednesday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 8)), 3);
|
||||
});
|
||||
|
||||
it("9 января 2014 - четверг", function() {
|
||||
assert.equal(getLocalDay(new Date(2014, 0, 9)), 4);
|
||||
it("9 January 2014 - thursday", function() {
|
||||
assert.equal(getWeekDay(new Date(2014, 0, 9)), 4);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
Решение - в использовании встроенной функции `getDay`. Она полностью подходит нашим целям, но для воскресенья возвращает 0 вместо 7:
|
||||
|
||||
```js run
|
||||
function getLocalDay(date) {
|
||||
|
||||
var day = date.getDay();
|
||||
|
||||
if (day == 0) { // день 0 становится 7
|
||||
if (day == 0) { // 0 becomes 7
|
||||
day = 7;
|
||||
}
|
||||
|
||||
|
@ -14,5 +12,3 @@ function getLocalDay(date) {
|
|||
|
||||
alert( getLocalDay(new Date(2012, 0, 3)) ); // 2
|
||||
```
|
||||
|
||||
Если удобнее, чтобы день недели начинался с нуля, то можно возвращать в функции `day - 1`, тогда дни будут от 0 (пн) до 6(вс).
|
|
@ -2,14 +2,11 @@ importance: 5
|
|||
|
||||
---
|
||||
|
||||
# День недели в европейской нумерации
|
||||
# European weekday
|
||||
|
||||
Напишите функцию, `getLocalDay(date)` которая возвращает день недели для даты `date`.
|
||||
|
||||
День нужно возвратить в европейской нумерации, т.е. понедельник имеет номер 1, вторник номер 2, ..., воскресенье - номер 7.
|
||||
European countries have days of week starting with monday (number 1), then tuesday (number 2) and till sunday (number 7). Write a function `getLocalDay(date)` that returns the "european" day of week for `date`.
|
||||
|
||||
```js no-beautify
|
||||
var date = new Date(2012, 0, 3); // 3 янв 2012
|
||||
alert( getLocalDay(date) ); // вторник, выведет 2
|
||||
let date = new Date(2012, 0, 3); // 3 Jan 2012
|
||||
alert( getLocalDay(date) ); // tuesday, should show 2
|
||||
```
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
function getDateAgo(date, days) {
|
||||
var dateCopy = new Date(date);
|
||||
let dateCopy = new Date(date);
|
||||
|
||||
dateCopy.setDate(date.getDate() - days);
|
||||
return dateCopy.getDate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
describe("getDateAgo", function() {
|
||||
|
||||
it("1 день до 02.01.2015 -> число 1", function() {
|
||||
it("1 day before 02.01.2015 -> day 1", function() {
|
||||
assert.equal(getDateAgo(new Date(2015, 0, 2), 1), 1);
|
||||
});
|
||||
|
||||
|
||||
it("2 день до 02.01.2015 -> число 31", function() {
|
||||
it("2 days before 02.01.2015 -> day 31", function() {
|
||||
assert.equal(getDateAgo(new Date(2015, 0, 2), 2), 31);
|
||||
});
|
||||
|
||||
it("100 дней от 02.01.2015 -> число 24", function() {
|
||||
it("100 days before 02.01.2015 -> day 24", function() {
|
||||
assert.equal(getDateAgo(new Date(2015, 0, 2), 100), 24);
|
||||
});
|
||||
|
||||
it("365 дней от 02.01.2015 -> число 2", function() {
|
||||
it("365 days before 02.01.2015 -> day 2", function() {
|
||||
assert.equal(getDateAgo(new Date(2015, 0, 2), 365), 2);
|
||||
});
|
||||
|
||||
it("не меняет переданный объект Date", function() {
|
||||
it("does not modify the given date", function() {
|
||||
var date = new Date(2015, 0, 2);
|
||||
var dateCopy = new Date(date);
|
||||
getDateAgo(dateCopy, 100);
|
||||
assert.equal(date.getTime(), dateCopy.getTime());
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Из даты `date` нужно вычесть указанное количество дней. Это просто:
|
||||
The idea is simple: to substract given number of days from `date`:
|
||||
|
||||
```js
|
||||
function getDateAgo(date, days) {
|
||||
|
@ -7,22 +7,21 @@ function getDateAgo(date, days) {
|
|||
}
|
||||
```
|
||||
|
||||
Ситуацию осложняет то, что исходный объект даты не должен меняться. Это разумное требование, оно позволит избежать сюрпризов.
|
||||
...But the function should not change `date`. That's an important thing, because the outer code which gives us the date does not expect it to change.
|
||||
|
||||
Для того чтобы ему соответствовать, создадим копию объекта даты:
|
||||
To implement it let's clone the date, like this:
|
||||
|
||||
```js run
|
||||
function getDateAgo(date, days) {
|
||||
var dateCopy = new Date(date);
|
||||
let dateCopy = new Date(date);
|
||||
|
||||
dateCopy.setDate(date.getDate() - days);
|
||||
return dateCopy.getDate();
|
||||
}
|
||||
|
||||
var date = new Date(2015, 0, 2);
|
||||
let date = new Date(2015, 0, 2);
|
||||
|
||||
alert( getDateAgo(date, 1) ); // 1, (1 января 2015)
|
||||
alert( getDateAgo(date, 2) ); // 31, (31 декабря 2014)
|
||||
alert( getDateAgo(date, 365) ); // 2, (2 января 2014)
|
||||
alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
|
||||
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
|
||||
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)
|
||||
```
|
||||
|
||||
|
|
|
@ -2,18 +2,20 @@ importance: 4
|
|||
|
||||
---
|
||||
|
||||
# День указанное количество дней назад
|
||||
# Which day of month was many days ago?
|
||||
|
||||
Создайте функцию `getDateAgo(date, days)`, которая возвращает число, которое было `days` дней назад от даты `date`.
|
||||
Create a function `getDateAgo(date, days)` to return the day of month `days` ago from the `date`.
|
||||
|
||||
Например, для 2 января 2015:
|
||||
For instance, if today is 20th, then `getDateAgo(new Date(), 1)` should be 19th and `getDateAgo(new Date(), 2)` should be 18th.
|
||||
|
||||
Should also work over months/years reliably:
|
||||
|
||||
```js
|
||||
var date = new Date(2015, 0, 2);
|
||||
let date = new Date(2015, 0, 2);
|
||||
|
||||
alert( getDateAgo(date, 1) ); // 1, (1 января 2015)
|
||||
alert( getDateAgo(date, 2) ); // 31, (31 декабря 2014)
|
||||
alert( getDateAgo(date, 365) ); // 2, (2 января 2014)
|
||||
alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
|
||||
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
|
||||
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)
|
||||
```
|
||||
|
||||
P.S. Важная деталь: в процессе вычислений функция не должна менять переданный ей объект `date`.
|
||||
P.S. The function should not modify the given `date`.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
function getLastDayOfMonth(year, month) {
|
||||
var date = new Date(year, month + 1, 0);
|
||||
let date = new Date(year, month + 1, 0);
|
||||
return date.getDate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
describe("getLastDayOfMonth", function() {
|
||||
it("последний день 01.01.2012 - 31", function() {
|
||||
it("last day of 01.01.2012 - 31", function() {
|
||||
assert.equal(getLastDayOfMonth(2012, 0), 31);
|
||||
});
|
||||
|
||||
it("последний день 01.02.2012 - 29 (високосный год)", function() {
|
||||
it("last day of 01.02.2012 - 29 (leap year)", function() {
|
||||
assert.equal(getLastDayOfMonth(2012, 1), 29);
|
||||
});
|
||||
|
||||
it("последний день 01.02.2013 - 28", function() {
|
||||
it("last day of 01.02.2013 - 28", function() {
|
||||
assert.equal(getLastDayOfMonth(2013, 1), 28);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
Создадим дату из следующего месяца, но день не первый, а "нулевой" (т.е. предыдущий):
|
||||
|
||||
Let's create a date using the next month, but pass zero as the day:
|
||||
```js run
|
||||
function getLastDayOfMonth(year, month) {
|
||||
var date = new Date(year, month + 1, 0);
|
||||
let date = new Date(year, month + 1, 0);
|
||||
return date.getDate();
|
||||
}
|
||||
|
||||
|
@ -11,3 +10,4 @@ alert( getLastDayOfMonth(2012, 1) ); // 29
|
|||
alert( getLastDayOfMonth(2013, 1) ); // 28
|
||||
```
|
||||
|
||||
Normally, dates start from 1, but technically we can pass any number, the date will autoadjust itself. So when we pass 0, then it means "one day before 1st day of the month", in other words: "the last day of the previous month".
|
||||
|
|
|
@ -2,13 +2,13 @@ importance: 5
|
|||
|
||||
---
|
||||
|
||||
# Последний день месяца?
|
||||
# Last day of month?
|
||||
|
||||
Напишите функцию `getLastDayOfMonth(year, month)`, которая возвращает последний день месяца.
|
||||
Write a function `getLastDayOfMonth(year, month)` that returns the last day of month. Sometimes it is 30th, 31st or even 28/29th for Feb.
|
||||
|
||||
Параметры:
|
||||
Parameters:
|
||||
|
||||
- `year` -- 4-значный год, например 2012.
|
||||
- `month` -- месяц от 0 до 11.
|
||||
- `year` -- four-digits year, for instance 2012.
|
||||
- `month` -- month, from 0 to 11.
|
||||
|
||||
Например, `getLastDayOfMonth(2012, 1) = 29` (високосный год, февраль).
|
||||
For instance, `getLastDayOfMonth(2012, 1) = 29` (leap year, Feb).
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
Для вывода достаточно сгенерировать объект `Date`, соответствующий началу дня, т.е. "сегодня" 00 часов 00 минут 00 секунд, и вычесть его из текущей даты.
|
||||
To get the number of seconds, we can generate a date using the current day and time 00:00:00, then substract it from "now".
|
||||
|
||||
Полученная разница -- это как раз количество миллисекунд от начала дня, которое достаточно поделить на `1000`, чтобы получить секунды:
|
||||
The difference is the number of milliseconds from the beginning of the day, that we should divide by 1000 to get seconds:
|
||||
|
||||
```js run
|
||||
function getSecondsToday() {
|
||||
var now = new Date();
|
||||
let now = new Date();
|
||||
|
||||
// создать объект из текущей даты, без часов-минут-секунд
|
||||
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
// create an object using the current day/month/year
|
||||
let today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
|
||||
var diff = now - today; // разница в миллисекундах
|
||||
return Math.round(diff / 1000); // перевести в секунды
|
||||
let diff = now - today; // ms difference
|
||||
return Math.round(diff / 1000); // make seconds
|
||||
}
|
||||
|
||||
alert( getSecondsToday() );
|
||||
```
|
||||
|
||||
Альтернативное решение -- получить часы/минуты/секунды и преобразовать их все в секунды:
|
||||
An alternative solution would be to get hours/minutes/seconds and convert them to seconds:
|
||||
|
||||
```js run
|
||||
function getSecondsToday() {
|
||||
var d = new Date();
|
||||
let d = new Date();
|
||||
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
|
||||
};
|
||||
```
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
Для получения оставшихся до конца дня миллисекунд нужно из "завтра 00ч 00мин 00сек" вычесть текущее время.
|
||||
To get the number of milliseconds till tomorrow, we can from "tomorrow 00:00:00" substract the current date.
|
||||
|
||||
Чтобы сгенерировать "завтра" -- увеличим текущую дату на 1 день:
|
||||
First, we generate that "tomorrow", and then do it:
|
||||
|
||||
```js run
|
||||
function getSecondsToTomorrow() {
|
||||
var now = new Date();
|
||||
let now = new Date();
|
||||
|
||||
// создать объект из завтрашней даты, без часов-минут-секунд
|
||||
var tomorrow = new Date(now.getFullYear(), now.getMonth(), *!*now.getDate()+1*/!*);
|
||||
// tomorrow date
|
||||
let tomorrow = new Date(now.getFullYear(), now.getMonth(), *!*now.getDate()+1*/!*);
|
||||
|
||||
var diff = tomorrow - now; // разница в миллисекундах
|
||||
return Math.round(diff / 1000); // перевести в секунды
|
||||
let diff = tomorrow - now; // difference in ms
|
||||
return Math.round(diff / 1000); // convert to seconds
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -2,14 +2,14 @@ importance: 5
|
|||
|
||||
---
|
||||
|
||||
# Сколько секунд - до завтра?
|
||||
# How many seconds till tomorrow?
|
||||
|
||||
Напишите функцию `getSecondsToTomorrow()` которая возвращает, сколько секунд осталось до завтра.
|
||||
Create a function `getSecondsToTomorrow()` that returns the number of seconds till tomorrow.
|
||||
|
||||
Например, если сейчас `23:00`, то:
|
||||
For instance, if now is `23:00`, then:
|
||||
|
||||
```js
|
||||
getSecondsToTomorrow() == 3600
|
||||
```
|
||||
|
||||
P.S. Функция должна работать в любой день, т.е. в ней не должно быть конкретного значения сегодняшней даты.
|
||||
P.S. The function should work at any day, the "today" is not hardcoded.
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
function formatDate(date) {
|
||||
|
||||
var dd = date.getDate();
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
|
||||
var mm = date.getMonth() + 1;
|
||||
if (mm < 10) mm = '0' + mm;
|
||||
|
||||
var yy = date.getFullYear() % 100;
|
||||
if (yy < 10) yy = '0' + yy;
|
||||
|
||||
return dd + '.' + mm + '.' + yy;
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
describe("formatDate", function() {
|
||||
it("правильно форматирует дату 30.01.14", function() {
|
||||
assert.equal(formatDate(new Date(2014, 0, 30)), '30.01.14');
|
||||
});
|
||||
|
||||
it("правильно форматирует дату 01.01.01", function() {
|
||||
assert.equal(formatDate(new Date(2001, 0, 1)), '01.01.01');
|
||||
});
|
||||
|
||||
it("правильно форматирует дату 01.01.00", function() {
|
||||
assert.equal(formatDate(new Date(2000, 0, 1)), '01.01.00');
|
||||
});
|
||||
});
|
|
@ -1,44 +0,0 @@
|
|||
Получим компоненты один за другим.
|
||||
|
||||
1. День можно получить как `date.getDate()`. При необходимости добавим ведущий ноль:
|
||||
|
||||
```js
|
||||
var dd = date.getDate();
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
```
|
||||
2. `date.getMonth()` возвратит месяц, начиная с нуля. Увеличим его на 1:
|
||||
|
||||
```js
|
||||
var mm = date.getMonth() + 1; // месяц 1-12
|
||||
if (mm < 10) mm = '0' + mm;
|
||||
```
|
||||
3. `date.getFullYear()` вернет год в 4-значном формате. Чтобы сделать его двузначным - воспользуемся оператором взятия остатка `'%'`:
|
||||
|
||||
```js
|
||||
var yy = date.getFullYear() % 100;
|
||||
if (yy < 10) yy = '0' + yy;
|
||||
```
|
||||
|
||||
Заметим, что год, как и другие компоненты, может понадобиться дополнить нулем слева, причем возможно что `yy == 0` (например, 2000 год). При сложении со строкой `0+'0' == '00'`, так что будет все в порядке.
|
||||
|
||||
Полный код:
|
||||
|
||||
```js run
|
||||
function formatDate(date) {
|
||||
|
||||
var dd = date.getDate();
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
|
||||
var mm = date.getMonth() + 1;
|
||||
if (mm < 10) mm = '0' + mm;
|
||||
|
||||
var yy = date.getFullYear() % 100;
|
||||
if (yy < 10) yy = '0' + yy;
|
||||
|
||||
return dd + '.' + mm + '.' + yy;
|
||||
}
|
||||
|
||||
var d = new Date(2014, 0, 30); // 30 Янв 2014
|
||||
alert( formatDate(d) ); // '30.01.14'
|
||||
```
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
importance: 3
|
||||
|
||||
---
|
||||
|
||||
# Вывести дату в формате дд.мм.гг
|
||||
|
||||
Напишите функцию `formatDate(date)`, которая выводит дату `date` в формате `дд.мм.гг`:
|
||||
|
||||
Например:
|
||||
|
||||
```js
|
||||
var d = new Date(2014, 0, 30); // 30 января 2014
|
||||
alert( formatDate(d) ); // '30.01.14'
|
||||
```
|
||||
|
||||
P.S. Обратите внимание, ведущие нули должны присутствовать, то есть 1 января 2001 должно быть 01.01.01, а не 1.1.1.
|
|
@ -0,0 +1,34 @@
|
|||
function formatDate(date) {
|
||||
var diff = new Date() - date; // number of ms till now
|
||||
|
||||
if (diff < 1000) { // less than a second
|
||||
return 'right now';
|
||||
}
|
||||
|
||||
var sec = Math.floor(diff / 1000); // get seconds
|
||||
|
||||
if (sec < 60) {
|
||||
return sec + ' sec. ago';
|
||||
}
|
||||
|
||||
var min = Math.floor(diff / 60000); // get minutes
|
||||
if (min < 60) {
|
||||
return min + ' min. ago';
|
||||
}
|
||||
|
||||
// format the date, take into account that months start from zero
|
||||
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); // remove extra zeroes
|
||||
}
|
||||
|
||||
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
describe("formatDate", function() {
|
||||
it("shows 1ms ago as \"right now\"", function() {
|
||||
assert.equal(formatDate(new Date(new Date - 1)), 'right now');
|
||||
});
|
||||
|
||||
it('"30 seconds ago"', function() {
|
||||
assert.equal(formatDate(new Date(new Date - 30 * 1000)), "30 сек. назад");
|
||||
});
|
||||
|
||||
it('"5 minutes ago"', function() {
|
||||
assert.equal(formatDate(new Date(new Date - 5 * 60 * 1000)), "5 мин. назад");
|
||||
});
|
||||
|
||||
it("older dates as dd.mm.yyyy hh:mm", function() {
|
||||
assert.equal(formatDate(new Date(2014, 2, 1, 11, 22, 33)), "01.03.14 11:22");
|
||||
});
|
||||
|
||||
});
|
24
1-js/5-data-types/03-date/8-format-date-relative/task.md
Normal file
24
1-js/5-data-types/03-date/8-format-date-relative/task.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
importance: 4
|
||||
|
||||
---
|
||||
|
||||
# Format the relative date
|
||||
|
||||
Write a function `formatDate(date)` that should format `date` as follows:
|
||||
|
||||
- If since `date` passed less than 1 second, then `"right now"`.
|
||||
- Otherwise, if since `date` passed less than 1 minute, then `"n sec. ago"`.
|
||||
- Otherwise, if less than an hour, then `"m min. ago"`.
|
||||
- Otherwise, the full date in the format `"day.month.year hours:minutes"`.
|
||||
|
||||
For instance:
|
||||
|
||||
```js
|
||||
alert( formatDate(new Date(new Date - 1)) ); // "right now"
|
||||
|
||||
alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 sec. ago"
|
||||
|
||||
alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 min. ago"
|
||||
|
||||
alert( formatDate(new Date(new Date - 86400 * 1000)) ); // yesterday's date like 31.12.2016, 20:00
|
||||
```
|
|
@ -1,34 +0,0 @@
|
|||
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(':');
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
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");
|
||||
});
|
||||
|
||||
});
|
|
@ -1,27 +0,0 @@
|
|||
importance: 4
|
||||
|
||||
---
|
||||
|
||||
# Относительное форматирование даты
|
||||
|
||||
Напишите функцию `formatDate(date)`, которая форматирует дату `date` так:
|
||||
|
||||
- Если со времени `date` прошло менее секунды, то возвращает `"только что"`.
|
||||
- Иначе если со времени `date` прошло менее минуты, то `"n сек. назад"`.
|
||||
- Иначе если прошло меньше часа, то `"m мин. назад"`.
|
||||
- Иначе полная дата в формате `"дд.мм.гг чч:мм"`.
|
||||
|
||||
Например:
|
||||
|
||||
```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)) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||
```
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue