用JavaScript + CSS就能做出簡單時鐘

Tina
Jun 23, 2021

--

Javascript30 - Day2 / setInterval / Date()

Photo by Laura Chouette on Unsplash

來到第二天挑戰,每天寫分享文最快樂得時間好像是在Unsplash上面找圖片,真的好療癒!

這次要分享的主題是:

  1. setInterval ():會與setTimeOut來比較,是過去沒有接觸過的語法
  2. 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() 讓使用者可以暫停時間計算
Display the current time
  • 很常見的進度條,竟然也可以透過setInterval() 去完成
Progress Bar Pratice

如何透過 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.626Z
console.log(typeof date);
// object
console.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() 使用方法還可參考:這篇文章了解更多

--

--