beautify 1st part of the tutorial
This commit is contained in:
parent
e3dd2cedc0
commit
6444024a9d
327 changed files with 2358 additions and 1986 deletions
|
@ -5,6 +5,6 @@
|
|||
```js
|
||||
//+ run
|
||||
var d = new Date(2012, 1, 20, 3, 12);
|
||||
alert(d);
|
||||
alert( d );
|
||||
```
|
||||
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
```js
|
||||
//+ run
|
||||
function getWeekDay(date) {
|
||||
var days = ['вс','пн','вт','ср','чт','пт','сб'] ;
|
||||
var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
|
||||
|
||||
return days[ date.getDay() ];
|
||||
return days[date.getDay()];
|
||||
}
|
||||
|
||||
var date = new Date(2014,0,3); // 3 января 2014
|
||||
alert( getWeekDay(date) ); // 'пт'
|
||||
var date = new Date(2014, 0, 3); // 3 января 2014
|
||||
alert( getWeekDay(date) ); // 'пт'
|
||||
```
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
Например:
|
||||
|
||||
```js
|
||||
//+ no-beautify
|
||||
var date = new Date(2012,0,3); // 3 января 2012
|
||||
alert( getWeekDay(date) ); // Должно вывести 'вт'
|
||||
```
|
||||
|
|
|
@ -6,14 +6,14 @@ function getLocalDay(date) {
|
|||
|
||||
var day = date.getDay();
|
||||
|
||||
if ( day == 0 ) { // день 0 становится 7
|
||||
day = 7;
|
||||
if (day == 0) { // день 0 становится 7
|
||||
day = 7;
|
||||
}
|
||||
|
||||
|
||||
return day;
|
||||
}
|
||||
|
||||
alert( getLocalDay(new Date(2012,0,3)) ); // 2
|
||||
alert( getLocalDay(new Date(2012, 0, 3)) ); // 2
|
||||
```
|
||||
|
||||
Если удобнее, чтобы день недели начинался с нуля, то можно возвращать в функции `day - 1`, тогда дни будут от 0 (пн) до 6(вс).
|
|
@ -7,6 +7,7 @@
|
|||
День нужно возвратить в европейской нумерации, т.е. понедельник имеет номер 1, вторник номер 2, ..., воскресенье - номер 7.
|
||||
|
||||
```js
|
||||
//+ no-beautify
|
||||
var date = new Date(2012, 0, 3); // 3 янв 2012
|
||||
alert( getLocalDay(date) ); // вторник, выведет 2
|
||||
```
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
```js
|
||||
function getDateAgo(date, days) {
|
||||
date.setDate( date.getDate() - days );
|
||||
return date.getDate();
|
||||
date.setDate(date.getDate() - days);
|
||||
return date.getDate();
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -15,9 +15,9 @@ function getDateAgo(date, days) {
|
|||
//+ run
|
||||
function getDateAgo(date, days) {
|
||||
var dateCopy = new Date(date);
|
||||
|
||||
dateCopy.setDate( date.getDate() - days );
|
||||
return dateCopy.getDate();
|
||||
|
||||
dateCopy.setDate(date.getDate() - days);
|
||||
return dateCopy.getDate();
|
||||
}
|
||||
|
||||
var date = new Date(2015, 0, 2);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
```js
|
||||
//+ run
|
||||
function getLastDayOfMonth(year, month) {
|
||||
var date = new Date(year, month+1, 0);
|
||||
var date = new Date(year, month + 1, 0);
|
||||
return date.getDate();
|
||||
}
|
||||
|
||||
|
|
|
@ -21,8 +21,8 @@ alert( getSecondsToday() );
|
|||
|
||||
```js
|
||||
//+ run
|
||||
function getSecondsToday(){
|
||||
var d = new Date();
|
||||
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
|
||||
function getSecondsToday() {
|
||||
var d = new Date();
|
||||
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
|
||||
};
|
||||
```
|
|
@ -4,15 +4,15 @@
|
|||
|
||||
```js
|
||||
var dd = date.getDate();
|
||||
if (dd<10) dd= '0'+dd;
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
```
|
||||
|
||||
</li>
|
||||
<li>`date.getMonth()` возвратит месяц, начиная с нуля. Увеличим его на 1:
|
||||
|
||||
```js
|
||||
var mm = date.getMonth() + 1; // месяц 1-12
|
||||
if (mm<10) mm= '0'+mm;
|
||||
var mm = date.getMonth() + 1; // месяц 1-12
|
||||
if (mm < 10) mm = '0' + mm;
|
||||
```
|
||||
|
||||
</li>
|
||||
|
@ -20,7 +20,7 @@ if (mm<10) mm= '0'+mm;
|
|||
|
||||
```js
|
||||
var yy = date.getFullYear() % 100;
|
||||
if (yy<10) yy= '0'+yy;
|
||||
if (yy < 10) yy = '0' + yy;
|
||||
```
|
||||
|
||||
Заметим, что год, как и другие компоненты, может понадобиться дополнить нулем слева, причем возможно что `yy == 0` (например, 2000 год). При сложении со строкой `0+'0' == '00'`, так что будет все в порядке.
|
||||
|
@ -34,18 +34,18 @@ if (yy<10) yy= '0'+yy;
|
|||
function formatDate(date) {
|
||||
|
||||
var dd = date.getDate();
|
||||
if ( dd < 10 ) dd = '0' + dd;
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
|
||||
var mm = date.getMonth()+1;
|
||||
if ( mm < 10 ) mm = '0' + mm;
|
||||
var mm = date.getMonth() + 1;
|
||||
if (mm < 10) mm = '0' + mm;
|
||||
|
||||
var yy = date.getFullYear() % 100;
|
||||
if ( yy < 10 ) yy = '0' + yy;
|
||||
if (yy < 10) yy = '0' + yy;
|
||||
|
||||
return dd+'.'+mm+'.'+yy;
|
||||
return dd + '.' + mm + '.' + yy;
|
||||
}
|
||||
|
||||
var d = new Date(2014, 0, 30); // 30 Янв 2014
|
||||
alert( formatDate(d) ); // '30.01.14'
|
||||
var d = new Date(2014, 0, 30); // 30 Янв 2014
|
||||
alert( formatDate(d) ); // '30.01.14'
|
||||
```
|
||||
|
||||
|
|
|
@ -4,45 +4,45 @@
|
|||
//+ run
|
||||
function formatDate(date) {
|
||||
var diff = new Date() - date; // разница в миллисекундах
|
||||
|
||||
|
||||
if (diff < 1000) { // прошло менее 1 секунды
|
||||
return 'только что';
|
||||
}
|
||||
|
||||
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд
|
||||
|
||||
var sec = Math.floor(diff / 1000); // округлить diff до секунд
|
||||
|
||||
if (sec < 60) {
|
||||
return sec + ' сек. назад';
|
||||
}
|
||||
|
||||
var min = Math.floor( diff / 60000 ); // округлить diff до минут
|
||||
|
||||
var min = Math.floor(diff / 60000); // округлить diff до минут
|
||||
if (min < 60) {
|
||||
return min + ' мин. назад';
|
||||
return min + ' мин. назад';
|
||||
}
|
||||
|
||||
// форматировать дату, с учетом того, что месяцы начинаются с 0
|
||||
var d = date;
|
||||
d = [
|
||||
'0'+d.getDate(),
|
||||
'0'+(d.getMonth()+1),
|
||||
''+d.getFullYear(),
|
||||
'0'+d.getHours(),
|
||||
'0'+d.getMinutes()
|
||||
'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);
|
||||
for (var i = 0; i < d.length; i++) {
|
||||
d[i] = d[i].slice(-2);
|
||||
}
|
||||
|
||||
return d.slice(0,3).join('.')+' '+d.slice(3).join(':');
|
||||
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
|
||||
}
|
||||
|
||||
alert( formatDate( new Date( new Date - 1) ) ); // только что
|
||||
alert( formatDate(new Date(new Date - 1)) ); // только что
|
||||
|
||||
alert( formatDate( new Date( new Date - 30*1000) ) ); // 30 сек. назад
|
||||
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 - 5 * 60 * 1000)) ); // 5 мин. назад
|
||||
|
||||
alert( formatDate( new Date( new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||
alert( formatDate(new Date(new Date - 86400 * 1000)) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||
```
|
||||
|
||||
|
|
|
@ -15,12 +15,12 @@
|
|||
```js
|
||||
function formatDate(date) { /* ваш код */ }
|
||||
|
||||
alert( formatDate( new Date(new Date - 1) ) ); // "только что"
|
||||
alert( formatDate(new Date(new Date - 1)) ); // "только что"
|
||||
|
||||
alert( formatDate( new Date(new Date - 30*1000) ) ); // "30 сек. назад"
|
||||
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 - 5 * 60 * 1000)) ); // "5 мин. назад"
|
||||
|
||||
alert( formatDate( new Date(new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||
alert( formatDate(new Date(new Date - 86400 * 1000)) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||
```
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
```js
|
||||
//+ run
|
||||
var now = new Date();
|
||||
alert(now);
|
||||
alert( now );
|
||||
```
|
||||
|
||||
</dd>
|
||||
|
@ -23,7 +23,7 @@ alert(now);
|
|||
```js
|
||||
//+ run
|
||||
// 24 часа после 01.01.1970 GMT+0
|
||||
var Jan02_1970 = new Date(3600*24*1000);
|
||||
var Jan02_1970 = new Date(3600 * 24 * 1000);
|
||||
alert( Jan02_1970 );
|
||||
```
|
||||
|
||||
|
@ -50,8 +50,8 @@ new Date(2011, 0, 1); // то же самое, часы/секунды по ум
|
|||
|
||||
```js
|
||||
//+ run
|
||||
var date = new Date(2011, 0, 1, 2, 3, 4, 567);
|
||||
alert(date); // 1.01.2011, 02:03:04.567
|
||||
var date = new Date(2011, 0, 1, 2, 3, 4, 567);
|
||||
alert( date ); // 1.01.2011, 02:03:04.567
|
||||
```
|
||||
|
||||
</dd>
|
||||
|
@ -94,11 +94,11 @@ alert(date); // 1.01.2011, 02:03:04.567
|
|||
var date = new Date();
|
||||
|
||||
// час в текущей временной зоне
|
||||
alert( date.getHours() );
|
||||
alert( date.getHours() );
|
||||
|
||||
// сколько сейчас времени в Лондоне?
|
||||
// час в зоне GMT+0
|
||||
alert( date.getUTCHours() );
|
||||
alert( date.getUTCHours() );
|
||||
```
|
||||
|
||||
Кроме описанных выше, существуют два специальных метода без UTC-варианта:
|
||||
|
@ -111,7 +111,7 @@ alert( date.getUTCHours() );
|
|||
|
||||
```js
|
||||
//+ run
|
||||
alert( new Date().getTimezoneOffset() ); // Для GMT-1 выведет 60
|
||||
alert( new Date().getTimezoneOffset() ); // Для GMT-1 выведет 60
|
||||
```
|
||||
|
||||
</dd>
|
||||
|
@ -141,11 +141,11 @@ alert( new Date().getTimezoneOffset() ); // Для GMT-1 выведет 60
|
|||
//+ run
|
||||
var today = new Date;
|
||||
|
||||
today.setHours(0);
|
||||
today.setHours(0);
|
||||
alert( today ); // сегодня, но час изменён на 0
|
||||
|
||||
today.setHours(0, 0, 0, 0);
|
||||
alert (today ); // сегодня, ровно 00:00:00.
|
||||
today.setHours(0, 0, 0, 0);
|
||||
alert( today ); // сегодня, ровно 00:00:00.
|
||||
```
|
||||
|
||||
### Автоисправление даты
|
||||
|
@ -166,10 +166,10 @@ alert(d); // ... это 1 февраля 2013!
|
|||
//+ run
|
||||
var d = new Date(2011, 1, 28);
|
||||
*!*
|
||||
d.setDate( d.getDate() + 2 );
|
||||
d.setDate(d.getDate() + 2);
|
||||
*/!*
|
||||
|
||||
alert(d); // 2 марта, 2011
|
||||
alert( d ); // 2 марта, 2011
|
||||
```
|
||||
|
||||
Также это используют для получения даты, отдаленной от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
|
||||
|
@ -177,9 +177,9 @@ alert(d); // 2 марта, 2011
|
|||
```js
|
||||
//+ run
|
||||
var d = new Date();
|
||||
d.setSeconds( d.getSeconds()+70);
|
||||
d.setSeconds(d.getSeconds() + 70);
|
||||
|
||||
alert(d); // выведет корректную дату
|
||||
alert( d ); // выведет корректную дату
|
||||
```
|
||||
|
||||
Можно установить и нулевые, и даже отрицательные компоненты. Например:
|
||||
|
@ -189,10 +189,10 @@ alert(d); // выведет корректную дату
|
|||
var d = new Date;
|
||||
|
||||
d.setDate(1); // поставить первое число месяца
|
||||
alert(d);
|
||||
alert( d );
|
||||
|
||||
d.setDate(0); // нулевого числа нет, будет последнее число предыдущего месяца
|
||||
alert(d);
|
||||
alert( d );
|
||||
```
|
||||
|
||||
|
||||
|
@ -202,7 +202,7 @@ alert(d);
|
|||
var d = new Date;
|
||||
|
||||
d.setDate(-1); // предпоследнее число предыдущего месяца
|
||||
alert(d);
|
||||
alert( d );
|
||||
```
|
||||
|
||||
### Преобразование к числу, разность дат
|
||||
|
@ -211,7 +211,7 @@ alert(d);
|
|||
|
||||
```js
|
||||
//+ run
|
||||
alert( +new Date ) // +date то же самое, что: +date.valueOf()
|
||||
alert(+new Date) // +date то же самое, что: +date.valueOf()
|
||||
```
|
||||
|
||||
**Важный побочный эффект: даты можно вычитать, результат вычитания объектов `Date` -- их временная разница, в миллисекундах**.
|
||||
|
@ -223,13 +223,13 @@ alert( +new Date ) // +date то же самое, что: +date.valueOf()
|
|||
var start = new Date; // засекли время
|
||||
|
||||
// что-то сделать
|
||||
for (var i=0; i<100000; i++) {
|
||||
var doSomething = i*i*i;
|
||||
for (var i = 0; i < 100000; i++) {
|
||||
var doSomething = i * i * i;
|
||||
}
|
||||
|
||||
var end = new Date; // конец измерения
|
||||
|
||||
alert("Цикл занял " + (end-start) + " ms");
|
||||
alert( "Цикл занял " + (end - start) + " ms" );
|
||||
```
|
||||
|
||||
### Бенчмаркинг
|
||||
|
@ -242,11 +242,11 @@ alert("Цикл занял " + (end-start) + " ms");
|
|||
|
||||
```js
|
||||
function walkIn(arr) {
|
||||
for(var key in arr) arr[i]++
|
||||
for (var key in arr) arr[i]++
|
||||
}
|
||||
|
||||
function walkLength(arr) {
|
||||
for(var i=0; i<arr.length; i++) arr[i]++;
|
||||
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -259,19 +259,24 @@ function walkLength(arr) {
|
|||
```js
|
||||
//+ run
|
||||
var arr = [];
|
||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
||||
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||
|
||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
||||
function walkIn(arr) {
|
||||
for (var key in arr) arr[i]++;
|
||||
}
|
||||
|
||||
function walkLength(arr) {
|
||||
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||
}
|
||||
|
||||
function bench(f) {
|
||||
var date = new Date();
|
||||
for (var i=0; i<10000; i++) f(arr);
|
||||
for (var i = 0; i < 10000; i++) f(arr);
|
||||
return new Date() - date;
|
||||
}
|
||||
|
||||
alert('Время walkIn: ' + bench(walkIn) + 'мс');
|
||||
alert('Время walkLength: ' + bench(walkLength) + 'мс');
|
||||
alert( 'Время walkIn: ' + bench(walkIn) + 'мс' );
|
||||
alert( 'Время walkLength: ' + bench(walkLength) + 'мс' );
|
||||
```
|
||||
|
||||
Теперь представим себе, что во время первого бенчмаркинга `bench(walkIn)` компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго -- перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
|
||||
|
@ -281,28 +286,34 @@ alert('Время walkLength: ' + bench(walkLength) + 'мс');
|
|||
```js
|
||||
//+ run
|
||||
var arr = [];
|
||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
||||
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||
|
||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
||||
function walkIn(arr) {
|
||||
for (var key in arr) arr[i]++;
|
||||
}
|
||||
|
||||
function walkLength(arr) {
|
||||
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||
}
|
||||
|
||||
function bench(f) {
|
||||
var date = new Date();
|
||||
for (var i=0; i<1000; i++) f(arr);
|
||||
for (var i = 0; i < 1000; i++) f(arr);
|
||||
return new Date() - date;
|
||||
}
|
||||
|
||||
*!*
|
||||
// bench для каждого теста запустим много раз, чередуя
|
||||
var timeIn = 0, timeLength = 0;
|
||||
for(var i=0; i<100; i++) {
|
||||
var timeIn = 0,
|
||||
timeLength = 0;
|
||||
for (var i = 0; i < 100; i++) {
|
||||
timeIn += bench(walkIn);
|
||||
timeLength += bench(walkLength);
|
||||
}
|
||||
*/!*
|
||||
|
||||
alert('Время walkIn: ' + timeIn + 'мс');
|
||||
alert('Время walkLength: ' +timeLength + 'мс');
|
||||
alert( 'Время walkIn: ' + timeIn + 'мс' );
|
||||
alert( 'Время walkLength: ' + timeLength + 'мс' );
|
||||
```
|
||||
|
||||
[smart header="Более точное время с `performance.now()`"]
|
||||
|
@ -328,13 +339,18 @@ alert('Время walkLength: ' +timeLength + 'мс');
|
|||
```js
|
||||
//+ run
|
||||
var arr = [];
|
||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
||||
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||
|
||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
||||
function walkIn(arr) {
|
||||
for (var key in arr) arr[i]++;
|
||||
}
|
||||
|
||||
function walkLength(arr) {
|
||||
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||
}
|
||||
|
||||
function bench(f) {
|
||||
for (var i=0; i<10000; i++) f(arr);
|
||||
for (var i = 0; i < 10000; i++) f(arr);
|
||||
}
|
||||
|
||||
console.time("All Benchmarks");
|
||||
|
@ -452,7 +468,7 @@ alert( d.toISOString() ); // вывод, похожий на '2011-01-26T13:51:5
|
|||
//+ run
|
||||
var msUTC = Date.parse('2012-01-26T13:51:50.417Z'); // зона UTC
|
||||
|
||||
alert(msUTC); // 1327571510417 (число миллисекунд)
|
||||
alert( msUTC ); // 1327571510417 (число миллисекунд)
|
||||
```
|
||||
|
||||
С таймзоной `-07:00 GMT`:
|
||||
|
@ -461,7 +477,7 @@ alert(msUTC); // 1327571510417 (число миллисекунд)
|
|||
//+ run
|
||||
var ms = Date.parse('2012-01-26T13:51:50.417-07:00');
|
||||
|
||||
alert(ms); // 1327611110417 (число миллисекунд)
|
||||
alert( ms ); // 1327611110417 (число миллисекунд)
|
||||
```
|
||||
|
||||
|
||||
|
@ -474,7 +490,7 @@ alert(ms); // 1327611110417 (число миллисекунд)
|
|||
//+ run
|
||||
var ms = Date.parse("January 26, 2011 13:51:50");
|
||||
|
||||
alert(ms);
|
||||
alert( ms );
|
||||
```
|
||||
|
||||
Вы также можете почитать о старых форматах IE в документации к методу <a href="http://msdn.microsoft.com/en-us/library/k4w173wk%28v=vs.85%29.aspx">MSDN Date.parse</a>.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue