day08-Math 和 Date

  • Math 是 js 的一個(gè)內(nèi)置對(duì)象,提供了一堆的方法幫助我們操作 數(shù)字
  • Date 是 js 的一個(gè)內(nèi)置對(duì)象,提供了一堆的方法幫助我們操作 時(shí)間

Math

  • 沒有什么多余的東西,就是一堆的方法來操作數(shù)字

random

  • Math.random() 這個(gè)方法是用來生成一個(gè) 0 ~ 1 之間的隨機(jī)數(shù)

  • 每次執(zhí)行生成的數(shù)字都不一樣,但是一定是 0 ~ 1 之間的

  • 生成的數(shù)字包含 0 ,但是不包含 1

    var num = Math.random()
    console.log(num) // 得到一個(gè)隨機(jī)數(shù)
    

round

  • Math.round() 是將一個(gè)小數(shù) 四舍五入 變成一個(gè)整數(shù)

    var num = 10.1
    console.log(Math.round(num)) // 10
    
    var num2 = 10.6
    console.log(Math.round(num2)) // 11
    

abs

  • Math.abs() 是返回一個(gè)數(shù)字的 絕對(duì)值

    var num = -10
    console.log(math.abs(num)) // 10
    

ceil

  • Math.ceil() 是將一個(gè)小數(shù) 向上取整 得到的整數(shù)

    var num = 10.1
    console.log(Math.ceil(num)) // 11
    
    var num2 = 10.9
    console.log(Math.ceil(num2)) // 11
    

floor

  • Math.floor() 是將一個(gè)小數(shù) 向下取整 的到的整數(shù)

    var num = 10.1
    console.log(Math.floor(num)) // 10
    
    var num2 = 10.9
    console.log(Math.floor(num2)) // 10
    

max

  • Math.max() 得到的是你傳入的幾個(gè)數(shù)字之中 最大 的那個(gè)數(shù)字

    console.log(Math.max(1, 2, 3, 4, 5)) // 5
    

min

  • Math.min() 得到的是你傳入的幾個(gè)數(shù)字之中 最小 的那個(gè)數(shù)字

    console.log(Math.min(1, 2, 3, 4, 5)) // 1
    

PI

  • Math.PI 得到的是 π 的值,也就是 3.1415926...

    console.log(Math.PI) // 3.141592653589793
    
    • 因?yàn)橛?jì)算機(jī)的計(jì)算精度問題,只能得到小數(shù)點(diǎn)后 15 位

強(qiáng)化練習(xí)1

  1. 編寫一個(gè)函數(shù),能夠獲得一個(gè)隨機(jī)的 0 ~ 255 之間的數(shù)字

    function getNum() {
      // code in here ...
    }
    
    var num = getNum()
    // 要求 num 的值在 1 ~ 255 之間(包含 1 和 255)
    
  2. 編寫一個(gè)函數(shù),獲得一個(gè)十六進(jìn)制的隨機(jī)顏色的字符串(例如:#20CD4F)

Date

  • js 提供的內(nèi)置構(gòu)造函數(shù),專門用來獲取時(shí)間的

new Date()

  • new Date() 在不傳遞參數(shù)的情況下是默認(rèn)返回當(dāng)前時(shí)間

    var time = new Date()
    console.log(time) // 當(dāng)前時(shí)間 Fri Mar 01 2019 13:11:23 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
    
  • new Date() 在傳入?yún)?shù)的時(shí)候,可以獲取到一個(gè)你傳遞進(jìn)去的時(shí)間

    var time = new Date('2019-03-03 13:11:11')
    console.log(time) // Sun Mar 03 2019 13:11:11 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
    
  • new Date() 傳遞的參數(shù)有多種情況

    1. 傳遞兩個(gè)數(shù)字,第一個(gè)表示年,第二個(gè)表示月份

      var time = new Date(2019, 00) // 月份從 0 開始計(jì)數(shù),0 表示 1月,11 表示 12月
      console.log(time) // Tue Jan 01 2019 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      
    2. 傳遞三個(gè)數(shù)字,前兩個(gè)不變,第三個(gè)表示該月份的第幾天,從 1 到 31

      var time = new Date(2019, 00, 05) 
      console.log(time) // Sat Jan 05 2019 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      
    3. 傳遞四個(gè)數(shù)字,前三個(gè)不變,第四個(gè)表示當(dāng)天的幾點(diǎn),從 0 到 23

      var time = new Date(2019, 00, 05, 22) 
      console.log(time) // Sat Jan 05 2019 22:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      
    4. 傳遞五個(gè)數(shù)字,前四個(gè)不變,第五個(gè)表示的是該小時(shí)的多少分鐘,從 0 到 59

      var time = new Date(2019, 00, 05, 22, 33) 
      console.log(time) // Sat Jan 05 2019 22:33:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      
    5. 傳遞六個(gè)數(shù)字,前五個(gè)不變,第六個(gè)表示該分鐘的多少秒,從 0 到 59

      var time = new Date(2019, 00, 05, 22, 33, 55) 
      console.log(time) // Sat Jan 05 2019 22:33:55 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      
    6. 傳入字符串的形式

      console.log(new Date('2019')) 
      // Tue Jan 01 2019 08:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      console.log(new Date('2019-02')) 
      // Fri Feb 01 2019 08:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      console.log(new Date('2019-02-03')) 
      // Sun Feb 03 2019 08:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      console.log(new Date('2019-02-03 13:')) 
      // Sun Feb 03 2019 13:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      console.log(new Date('2019-02-03 13:13:')) 
      // Sun Feb 03 2019 13:13:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      console.log(new Date('2019-02-03 13:13:13')) 
      // Sun Feb 03 2019 13:13:13 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
      

將日期字符串格式化成指定內(nèi)容

  • 比如我們得到的時(shí)間字符串是 Sun Feb 03 2019 13:13:13 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
  • 我指向得到這個(gè)日期中是那一年,我們就要靠截取字符串的形式得到
  • 但是現(xiàn)在 js 為我們提供了一系列的方法來得到里面的指定內(nèi)容

getFullYear

  • getFullYear() 方式是得到指定字符串中的哪一年

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getFullYear()) // 2019
    

getMonth

  • getMonth() 方法是得到指定字符串中的哪一個(gè)月份

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getMonth()) // 3
    
    • 這里要有一個(gè)注意的地方
    • 月份是從 0 開始數(shù)的
    • 0 表示 1月,1 表示 2月,依此類推

getDate

  • getDate() 方法是得到指定字符串中的哪一天

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getDate()) // 3
    

getHours

  • getHours() 方法是得到指定字符串中的哪小時(shí)

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getHours()) // 8
    

getMinutes

  • getMinutes() 方法是得到指定字符串中的哪分鐘

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getMinutes()) // 0
    

getSeconds

  • getSeconds() 方法是得到指定字符串中的哪秒鐘

    var time = new Date(2019, 03, 03, 08, 00, 22)
    console.log(time.getSeconds()) // 22
    

getDay

  • getDay() 方法是得到指定字符串當(dāng)前日期是一周中的第幾天(周日是 0,周六是 6)

    var time = new Date(2019, 03, 08, 08, 00, 22)
    console.log(time.getDay()) // 1
    

getTime

  • getTime() 方法是得到執(zhí)行時(shí)間到 格林威治時(shí)間 的毫秒數(shù)

    var time = new Date(2019, 03, 08, 08, 00, 22)
    console.log(time.getTime()) // 1554681622000
    

獲取時(shí)間差

  • 是指獲取兩個(gè)時(shí)間點(diǎn)之間相差的時(shí)間
  • 在 js 中是不能用時(shí)間直接做 減法 的
  • 我們需要一些特殊的操作
  • 在編程的世界里面,有一個(gè)特殊的時(shí)間,是 1970年01月01日00時(shí)00分00秒
  • 這個(gè)時(shí)間我們叫做 格林威治時(shí)間
  • 所有的編程世界里面,這個(gè)時(shí)間都是一樣的,而且 格林威治時(shí)間 的數(shù)字是 0
  • 格林威治時(shí)間 開始,每經(jīng)過1毫秒,數(shù)字就會(huì) + 1
  • 所以我們可以獲取到任意一個(gè)時(shí)間節(jié)點(diǎn)到 格林威治時(shí)間 的毫秒數(shù)
  • 然后在用兩個(gè)毫秒數(shù)相減,就能得到兩個(gè)時(shí)間點(diǎn)之間相差的毫秒數(shù)
  • 我們?cè)谕ㄟ^這個(gè)毫秒數(shù)得到準(zhǔn)確的時(shí)間

計(jì)算時(shí)間差

  • 例如:我們現(xiàn)在計(jì)算一下 2019-01-01 00:00:002019-01-03 04:55:34 的時(shí)間差
  1. 先獲取兩個(gè)時(shí)間點(diǎn)到 格林威治時(shí)間 的毫秒數(shù)

    var time1 = new Date('2019-01-01 00:00:00')
    var time2 = new Date('2019-01-03 04:55:34')
    
    time1 = time1.getTime()
    time2 = time2.getTime()
    
    console.log(time1) // 1546272000000
    console.log(time2) // 1546462534000
    
  2. 兩個(gè)時(shí)間相減,得到兩個(gè)時(shí)間點(diǎn)之間相差的毫秒數(shù)

    var differenceTime = time2 - time1
    console.log(differenceTime) // 190534000
    
    • 現(xiàn)在我們計(jì)算出了兩個(gè)時(shí)間點(diǎn)之間相差的毫秒數(shù)

定時(shí)器

setInterval(func,time)
有兩個(gè)參數(shù),第一個(gè)參數(shù)是一個(gè)函數(shù),第二個(gè)參數(shù)是時(shí)間間隔,單位是毫秒
每間隔time毫秒,會(huì)執(zhí)行一次函數(shù)
setInterval的返回值是一個(gè)數(shù)字

function box(){
    console.log(1)
}

var timer = setInerval(box,1000);

上面代碼意思是,每間隔1000毫秒,box函數(shù)執(zhí)行一次。
取消定時(shí)器的執(zhí)行
如果想要取消定時(shí)器的執(zhí)行我們需要拿到setInerval定時(shí)器函數(shù)的返回值,調(diào)用clearInterval,清除定時(shí)器
clearInterval(timer),調(diào)用之后box函數(shù)就不會(huì)再執(zhí)行了!

強(qiáng)化練習(xí)2

將日期格式化輸出 “2015|01|24”

判斷兩個(gè)日期相差的天數(shù)

獲得N天以后的日期

日期函數(shù)封裝(dateUtil.js)(封裝常見的功能)a

強(qiáng)化練習(xí)3

數(shù)碼時(shí)鐘(見圖)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容