Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yuriipohorilets/goit-js-hw-09

πŸ“š JS-HW-09 | Async. Data. Promise
https://github.com/yuriipohorilets/goit-js-hw-09

async goit javascript promise

Last synced: about 3 hours ago
JSON representation

πŸ“š JS-HW-09 | Async. Data. Promise

Awesome Lists containing this project

README

        

# ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Data. ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ | goit-js-hw-09
## ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°
- Π‘ΠΎΠ·Π΄Π°Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ `goit-js-hw-09`.
- ΠŸΡ€ΠΈ сдачС домашнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ссылки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Π½Π° исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ страницу Π½Π° `GitHub Pages`.
- ΠŸΡ€ΠΈ посСщСнии ΠΆΠΈΠ²ΠΎΠΉ страницы задания, Π² консоли Π½Π΅Ρ‚Ρƒ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
- ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ собран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ [parcel-project-template](https://github.com/goitacademy/parcel-project-template).
- Код ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ `Prettier`.

## Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
[Π‘ΠΊΠ°Ρ‡Π°ΠΉ](https://downgit.github.io/#/home?url=https:%2F%2Fgithub.com%2Fgoitacademy%2Fjavascript-homework%2Ftree%2Fmain%2Fv2%2F09%2Fsrc) стартовыС Ρ„Π°ΠΉΠ»Ρ‹ с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, стилями ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ скриптов для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ задания. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉ ΠΈΡ… сСбС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΏΠ°ΠΏΠΊΡƒ `src` Π² [parcel-project-template](https://github.com/goitacademy/parcel-project-template).

### Π—Π°Π΄Π°Π½ΠΈΠ΅ 1 - ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²
Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… `01-color-switcher.html` ΠΈ `01-color-switcher.js`. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ.

Π’ HTML Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«StartΒ» ΠΈ Β«StopΒ».
```
Start
Stop
```
Напиши скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«StartΒ», Ρ€Π°Π· Π² сСкунду мСняСт Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° `` Π½Π° случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Π»Π°ΠΉΠ½ ΡΡ‚ΠΈΠ»ΡŒ. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StopΒ», ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

>:warning: **Π’ΠΠ˜ΠœΠΠΠ˜Π•!** Π£Ρ‡Ρ‚ΠΈ, Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ бСсконСчноС количСство Ρ€Π°Π·. Π‘Π΄Π΅Π»Π°ΠΉ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ Π·Π°ΠΏΡƒΡˆΠ΅Π½ΠΎ, ΠΊΠ½ΠΎΠΏΠΊΠ° Β«StartΒ» Π±Ρ‹Π»Π° Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° (disabled).

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайного Ρ†Π²Π΅Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `getRandomHexColor`.
```
function getRandomHexColor() {
return `#${Math.floor(Math.random() * 16777215).toString(16)}`;
}
```
### Π—Π°Π΄Π°Π½ΠΈΠ΅ 2 - Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ отсчСта
Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… `02-timer.html` ΠΈ `02-timer.js`. Напиши скрипт Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Ρ‘Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹. Π’Π°ΠΊΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±Π»ΠΎΠ³Π°Ρ… ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Ρ…, страницах рСгистрации событий, Π²ΠΎ врСмя тСхничСского обслуТивания ΠΈ Ρ‚. Π΄. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

#### Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ интСфрСйса
Π’ HTML Π΅ΡΡ‚ΡŒ готовая Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, поля Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ. Π”ΠΎΠ±Π°Π²ΡŒ минимальноС ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ элСмСнтов интСрфСйса.
```

Start



00
Days


00
Hours


00
Minutes


00
Seconds


```
#### Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° `flatpickr`
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ [flatpickr](https://flatpickr.js.org/) для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ кроссбраузСрно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя Π² ΠΎΠ΄Π½ΠΎΠΌ элСмСнтС интСрфСйса. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ CSS ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠΌΠΏΠΎΡ€Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
```
// Описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
import flatpickr from "flatpickr";
// Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ стилСй
import "flatpickr/dist/flatpickr.min.css";
```
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Π΅Ρ‘ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π½Π° элСмСнтС `input[type="text"]`, поэтому ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»Π΅ `input#datetime-picker`.
```

```
Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `flatpickr(selector, options)` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠœΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для тСбя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для выполнСния задания. Π Π°Π·Π±Π΅Ρ€ΠΈΡΡŒ Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ свойство Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Β«OptionsΒ» ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π΅Π³ΠΎ Π² своСм ΠΊΠΎΠ΄Π΅.
```
const options = {
enableTime: true,
time_24hr: true,
defaultDate: new Date(),
minuteIncrement: 1,
onClose(selectedDates) {
console.log(selectedDates[0]);
},
};
```
#### Π’Ρ‹Π±ΠΎΡ€ Π΄Π°Ρ‚Ρ‹
ΠœΠ΅Ρ‚ΠΎΠ΄ `onClose()` ΠΈΠ· ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ элСмСнта интСрфСйса ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт `flatpickr`. ИмСнно Π² Π½Ρ‘ΠΌ стоит ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `selectedDates` это массив Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π΄Π°Ρ‚, поэтому ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.

- Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» Π΄Π°Ρ‚Ρƒ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ, ΠΏΠΎΠΊΠ°ΠΆΠΈ `window.alert()` с тСкстом `"Please choose a date in the future"`.
- Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» Π²Π°Π»ΠΈΠ΄Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ (Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ), ΠΊΠ½ΠΎΠΏΠΊΠ° Β«StartΒ» становится Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ.
- Кнопка Β«StartΒ» Π΄ΠΎΠ»ΠΆΠ° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π» Π΄Π°Ρ‚Ρƒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.
- ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» начинаСтся отсчСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° наТатия.
#### ΠžΡ‚ΡΡ‡Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» скрипт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ€Π°Π· Π² сСкунду сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ интСрфСйс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, показывая Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹: Π΄Π½ΠΈ, часы, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΈ сСкунды Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ `xx:xx:xx:xx`.

- ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΡƒΡ… Ρ†ΠΈΡ„Ρ€.
- Π’Π°ΠΉΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ³Π΄Π° дошСл Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ `00:00:00:00`.

>:exclamation: **НЕ Π‘Π£Π”Π•Πœ Π£Π‘Π›ΠžΠ–ΠΠ―Π’Π¬** Если Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ страницу.

Для подсчСта Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `convertMs`, Π³Π΄Π΅ `ms` - Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚ΠΎΠΉ Π² миллисСкундах.
```
function convertMs(ms) {
// Number of milliseconds per unit of time
const second = 1000;
const minute = second * 60;
const hour = minute * 60;
const day = hour * 24;

// Remaining days
const days = Math.floor(ms / day);
// Remaining hours
const hours = Math.floor((ms % day) / hour);
// Remaining minutes
const minutes = Math.floor(((ms % day) % hour) / minute);
// Remaining seconds
const seconds = Math.floor((((ms % day) % hour) % minute) / second);

return { days, hours, minutes, seconds };
}

console.log(convertMs(2000)); // {days: 0, hours: 0, minutes: 0, seconds: 2}
console.log(convertMs(140000)); // {days: 0, hours: 0, minutes: 2, seconds: 20}
console.log(convertMs(24140000)); // {days: 0, hours: 6 minutes: 42, seconds: 20}
```
#### Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
Ѐункция `convertMs()` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с рассчитанным ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 4 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ функция Π²Π΅Ρ€Π½Π΅Ρ‚ `4`, Π° Π½Π΅ `04`. Π’ интСрфСйсС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ `0` Ссли Π² числС мСньшС Π΄Π²ΡƒΡ… символов. Напиши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `addLeadingZero(value)`, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ `padStart()` ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ отрисовкой интСфрСйса Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

#### Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
>:warning: **Π’ΠΠ˜ΠœΠΠΠ˜Π•** Π­Ρ‚ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π΅ обязатСлСн ΠΏΡ€ΠΈ сдачС задания, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

Для отобраТСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ вмСсто `window.alert()` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ [notiflix](https://github.com/notiflix/Notiflix#readme).

### Π—Π°Π΄Π°Π½ΠΈΠ΅ 3 - Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ промисов
Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… `03-promises.html` ΠΈ `03-promises.js`. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° промисов.

Π’ HTML Π΅ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹, Π² поля ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² миллисСкундах, шаг увСличСния Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ промиса послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ количСство промисов ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.
```


First delay (ms)



Delay step (ms)



Amount


Create promises

```
Напиши скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ сабмитС Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `createPromise(position, delay)` ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π²Π²Π΅Π»ΠΈ Π² ΠΏΠΎΠ»Π΅ `amount`. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉ Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€ создаваСмого промиса `(position)` ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ учитывая Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ `(delay)` ΠΈ шаг `(step)`.
```
function createPromise(position, delay) {
const shouldResolve = Math.random() > 0.3;
if (shouldResolve) {
// Fulfill
} else {
// Reject
}
}
```
Π”ΠΎΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `createPromise` Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° **ΠΎΠ΄ΠΈΠ½ промис**, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполянСтся ΠΈΠ»ΠΈ отклоняСтся Ρ‡Π΅Ρ€Π΅Π· `delay` Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ промиса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ свойства `position` ΠΈ `delay` со значСниями ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с промисом - Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ.
```
createPromise(2, 1500)
.then(({ position, delay }) => {
console.log(`βœ… Fulfilled promise ${position} in ${delay}ms`);
})
.catch(({ position, delay }) => {
console.log(`❌ Rejected promise ${position} in ${delay}ms`);
});
```
#### Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
>:warning: **Π’ΠΠ˜ΠœΠΠΠ˜Π•** Π­Ρ‚ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π΅ обязатСлСн ΠΏΡ€ΠΈ сдачС задания, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

Для отобраТСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ вмСсто `console.log()` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ [notiflix](https://github.com/notiflix/Notiflix#readme).