Javascript30 - Day2 / setInterval / Date()
來到第二天挑戰,每天寫分享文最快樂得時間好像是在Unsplash上面找圖片,真的好療癒!
這次要分享的主題是:
- setInterval ():會與setTimeOut來比較,是過去沒有接觸過的語法
- Date():過去經常接觸,想透過分享更熟悉觀念
專案目標:製作一個跟著正確時間轉動的時鐘(包和時針、分針、秒針)
專案成果:https://github.com/tinahung126/JS30-challenge/tree/master/02%20-%20JS%20and%20CSS%20Clock
setInterval() / setTimeOut() 兩個有什麼不一樣?
之前很常接觸到的就是 setTimeOut() 讓函式延遲多久後再執行,而這次學到的是 setInterval(),在這邊的用途是指針隨時時間「不斷地」移動(也就是一直重複執行函式),而這也是兩者最大的差別。
setTimeOut() 是在指定的延遲時間後,執行一次函示;setInterval() 則是在延遲時間後,不段重複執行函式,每個函式間隔時間等於指定的延遲時間。
就跟自動化的口罩生產機很像,當你啟動他時,他就會一直在特定間隔時間將口罩壓模 ,而如果要停止這個永無止盡的生產線,則需要按下暫停,setInterval()也是,當你要停止重複執行函式時,需要使用 clearInterval()的來暫停執行。
而 setInterval() 本身帶的Parameters 有:
- function
- delay time:毫秒計算
- Parameter for the function
setInterval(myCallback, 500, 'Parameter 1', 'Parameter 2');
這個好用的函式,不僅可以用在這次的時鐘專案,透過W3School 的介紹,了解更多可以使用的場景。
- 與此次專案內容很像,但是為另一種以為文字為主的時間表達方式,並透過 clearInterval() 讓使用者可以暫停時間計算
- 很常見的進度條,竟然也可以透過setInterval() 去完成
如何透過 Date() 取得每分每秒呢?
JavaScript Date()的用法真的超常見,為了更清楚使用方法,特地將 MDN 文件翻閱了一遍。
我覺得比較重要的是:JavaScript Date()
只能由以 new Date()
方式產生,如果把 Date 作為一般的函數來呼叫(省略掉 new
運算子),則是得到字串,以下實際操作一遍,可以看到兩者的呈現方式不同。
const date = new Date();const date1 = Date();console.log(date);
// 2021-06-23T11:46:43.626Zconsole.log(typeof date);
// objectconsole.log(date1);
//Wed Jun 23 2021 19:46:43 GMT+0800 (Taipei Standard Time) console.log(typeof date1);
//string
而也可以根據自己專案需求取到合適的時間值:
const date = new Date();console.log(date.getMinutes()) //2 分鐘console.log(date.getHours()) // 20 小時console.log(date.getDate()) // 23 日console.log(date.getDay()) // 3 → 星期幾的意思:星期日為0~星期六為6console.log(date.getMonth()) //5 → 月份從0開始,現在是六月則以5表示console.log(date.getFullYear()) //2021 年份console.log(date.getTime()) // 1624449816615 → 代表從 1970/1/1 00:00:00 UTC 開始算到現在的毫秒數(milliseconds)
而以上的寫法都是使用local time 當地時間(瀏覽器作業系統設定的時區),若要使用UTC(國家標準時間)的話,可以參考MDN上的方法,另外也可以參考泛科學有一篇關於GMT+8 和 UTC+8 的文章唷!
關於Date() 使用方法還可參考:這篇文章了解更多