進(jìn)階篇:Math & Date (8-2)

饑人谷學(xué)習(xí)進(jìn)階第 8 天

Math

Math對象是JS的內(nèi)置對象悲柱,提供一系列數(shù)學(xué)常數(shù)和數(shù)學(xué)方法揖曾。Math對象只提供靜態(tài)的屬性和方法尾序,所以使用時不用實例化刺彩。

屬性

Math對象提供以下一些只讀的數(shù)學(xué)常數(shù)迷郑。

Math.E // 2.718281828459045
Math.LN2 // 0.6931471805599453
Math.LN10 // 2.302585092994046
Math.LOG2E // 1.4426950408889634
Math.LOG10E // 0.4342944819032518
Math.PI // 3.141592653589793
Math.SQRT1_2 // 0.7071067811865476
Math.SQRT2 // 1.4142135623730951

方法

round
用于四舍五入

Math.round(0.1)  // 0
Math.round(0.5)  // 1

abs
返回參數(shù)值的絕對值

Math.abs(1)  // 1
Math.abs(-1) // 1

max,min
max方法返回最大的參數(shù)创倔,min方法返回最小的參數(shù)

Math.max(2,-1,5)  // 5
Math.min(2,-1,5)  // -1  

floor嗡害,ceil
floor方法返回小于參數(shù)值的最大整數(shù)

Math.floor(3.2)  // 3
Math.floor(-3.2) // -4

ceil方法返回大于參數(shù)值的最小整數(shù)

Math.ceil(3.2)  // 4
Math.ceil(-3.2) // -3

pow,sqrt
pow方法返回以第一個參數(shù)為底數(shù)畦攘,第二個參數(shù)為冪的指數(shù)值

Math.pow(2,2) // 4
Math.pow(2,3) // 8

sqrt方法返回參數(shù)值的平方根霸妹,如果參數(shù)是一個負(fù)值,則返回NaN

Math.sqrt(4)  // 2
Math.sqrt(-4) //NaN

log,exp
log方法返回以e為底的自然對數(shù)值

Math.log(Math.E) // 1
Math.log(10)  // 2.302585092994046

求以10為底的對數(shù)念搬,可以除以以Math.LN10抑堡;求以2為底的對數(shù)摆出,可以除以Math.LN2。

Math.log(100)/Math.LN10  // 2
Math.log(8)/Math.LN2  // 3

exp方法返回常數(shù)e的參數(shù)次方

Math.exp(1)  // 2.718281828459045
Math.exp(3)  // 20.085536923187668

random
該方法返回0到1的一個偽隨機(jī)數(shù)首妖,可能等于0偎漫,但是一定小于1
Math.random()

// 返回給定范圍內(nèi)的隨機(jī)數(shù)
function getRandomArbitrary (min,max) {
    return Math.random() * (max - min) + min;
}

// 返回給定范圍內(nèi)的隨機(jī)整數(shù)
function getRandomInt(min,max) {
    return Math.floor(Math.random() * (max - min + 1)) + min
}

三角函數(shù)
sin方法返回參數(shù)的正弦,cos方法返回參數(shù)的余弦有缆,tan方法返回參數(shù)的正切

Math.sin(0)  // 0
Math.cos(1)  // 1
Maht.tan(0)  // 0

asin方法返回參數(shù)的反正弦象踊,acos方法返回參數(shù)的反余弦,atan方法返回參數(shù)的反正切棚壁。這三個方法的返回值都是弧度值杯矩。

Math.asin(1) // 1.5707963267948966
Math.acos(1) // 0
Math.atan(1) // 0.7853981633974483

Date

時間的表達(dá)方式

GMT
是指位于英國倫敦郊區(qū)的皇家格林尼治天文臺當(dāng)?shù)氐臉?biāo)準(zhǔn)時間,因為本初子午線被定義為通過那里的經(jīng)線袖外。

自1924年2月5日開始史隆,格林尼治天文臺負(fù)責(zé)每隔一小時向全世界發(fā)放調(diào)時信息。

理論上來說曼验,格林尼治標(biāo)準(zhǔn)時間的正午是指當(dāng)太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點(diǎn)時)的時間泌射。但由于地球在它的橢圓軌道里的運(yùn)動速度不均勻,這個時刻可能與實際的太陽時有誤差鬓照,最大誤差達(dá)16分鐘熔酷。原因在于地球每天的自轉(zhuǎn)是有些不規(guī)則的,而且正在緩慢減速豺裆,因此格林尼治時間基于天文觀測本身的缺陷拒秘,已經(jīng)被原子鐘報時的協(xié)調(diào)世界時(UTC)所取代。

UTC
協(xié)調(diào)世界時(英語:Coordinated Universal Time臭猜,法語:Temps Universel Coordonné躺酒,簡稱UTC)是最主要的世界時間標(biāo)準(zhǔn),其以原子時秒長為基礎(chǔ)蔑歌,在時刻上盡量接近于格林尼治標(biāo)準(zhǔn)時間阴颖。中華民國采用CNS 7648的《資料元及交換格式–資訊交換–日期及時間的表示法》(與ISO 8601類似)稱之為世界協(xié)調(diào)時間。中華人民共和國采用ISO 8601:2000的國家標(biāo)準(zhǔn)GB/T 7408-2005《數(shù)據(jù)元和交換格式 信息交換 日期和時間表示法》中亦稱之為協(xié)調(diào)世界時

CST
北京時間丐膝,又名中國標(biāo)準(zhǔn)時間,是中國大陸的標(biāo)準(zhǔn)時間钾菊,比世界協(xié)調(diào)時快八小時(即UTC+8)帅矗,與香港、澳門煞烫、臺北浑此、吉隆坡、新加坡等地的標(biāo)準(zhǔn)時間相同滞详。

Date對象

Date對象是JS提供的日期和時間的操作接口

JS中的Date

var d = new Date()
console.log(d.toString())   //"Wed Feb 28 2018 17:18:26 GMT+0800 (CST)"
console.log(d.toGMTString()) //"Wed, 28 Feb 2018 09:18:26 GMT"
console.log(d.toUTCString())  //"Wed, 28 Feb 2018 09:18:26 GMT"
console.log(d.toISOString()) //"2018-02-28T09:18:26.967Z"

new Date()
使用Date構(gòu)造函數(shù)創(chuàng)建一個Date的實例

var d = new Date()

d.getTime()         //返回實例對象距離1970年1月1日00:00:00對應(yīng)的毫秒數(shù)
d.getDate()         //返回實例對象對應(yīng)每個月的幾號(從1開始)
d.getDay()          //返回星期凛俱,星期日為0紊馏,星期一為1,以此類推
d.getFullYear()     //返回四位的年份
d.getMonth()        //返回月份(0表示1月蒲犬,11表示12月)
d.getHours()        //返回小時(0~23)
d.getMilliseconds() //返回毫秒(0-999)
d.getMinutes()      //返回分鐘(0-59)
d.getSeconds()      //返回秒(0-59)

set

var d2 = new Date()
d2.setDate()
Date.prototype.setDate(date):設(shè)置實例對象對應(yīng)的每個月的幾號(1-31)朱监,返回改變后毫秒時間戳
Date.prototype.setFullYear(year [, month, date]):設(shè)置四位年份
Date.prototype.setHours(hour [, min, sec, ms]):設(shè)置小時(0-23)
Date.prototype.setMilliseconds():設(shè)置毫秒(0-999)
Date.prototype.setMinutes(min [, sec, ms]):設(shè)置分鐘(0-59)
Date.prototype.setMonth(month [, date]):設(shè)置月份(0-11)
Date.prototype.setSeconds(sec [, ms]):設(shè)置秒(0-59)
Date.prototype.setTime(milliseconds):設(shè)置毫秒時間戳

Date.prototype.toString()
toString方法返回一個完整的時間字符串

var today = new Date();
today.toString(); // "Wed May 22 2019 22:20:45 GMT+0800 (中國標(biāo)準(zhǔn)時間)"

Date.prototype.toUTCString(),
Date.prototype.toISOString()

toUTCString方法返回對應(yīng)的UTC時間,也就是比北京時間晚8個小時原叮。toISOString方法返回對應(yīng)時間的ISO8601寫法

var today = new Date();
today.toUTCString(); 
today.toISOString(); 

Date.prototype.toDateString()赫编,Date.prototype.toTimeString()
toDateString方法返回日期的字符串形式,toTimeString方法返回時間的字符串形式

var today = new Date();
today.toDateString();
today.toTimeString(); 

toLocalDateString, toLocalTimeString
toLocalDateString方法返回一個字符串奋隶,代表日期的當(dāng)?shù)貙懛?br> toLocalTimeString方法返回一個字符串擂送,代表時間的當(dāng)?shù)貙懛?/p>

var today = new Date();
today.toLocaleDateString(); 
today.toLocaleTimeString(); 

new Date(milliseconds)
Date對象接受從1970年1月1日00:00:00 UTC開始計算的毫秒數(shù)作為參數(shù)。這意味著如果將Unix時間戳作為參數(shù)唯欣,必須將Unix時間戳乘以1000

var Jan02_1970 = new Date(3600*24*1000); // Fri Jan 02 1970 08:00:00 GMT+0800 (CST)

new Date(datestring)
Date對象還接受一個日期字符串作為參數(shù)嘹吨,返回所對應(yīng)的時間。所有可以被Date.parse()方法解析的日期字符串境氢,都可以當(dāng)作Date對象的參數(shù)

new Date("2013-02-15")
new Date("2013-FEB-15")
new Date("FEB, 15, 2013")
new Date("FEB 15, 2013")
new Date("Feberuary, 15, 2013")
new Date("Feberuary 15, 2013")
new Date("15, Feberuary, 2013")

new Date(year, month [, day, hours, minutes, seconds, ms])
在多個參數(shù)的情況下蟀拷,Date對象將其分別視作對應(yīng)的年、月产还、日匹厘、小時、分鐘脐区、秒和毫秒愈诚。如果采用這種用法,最少需要指定兩個參數(shù)(年和月)牛隅,其他參數(shù)都是可選的炕柔,默認(rèn)等于0。如果只使用年一個參數(shù)媒佣,Date對象會將其解釋為毫秒數(shù)

new Date(2013) // Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
new Date(2013,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1,0,0,0,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

上面代碼(除了第一行)返回的是2013年1月1日零點(diǎn)的時間匕累,可以看到月份從0開始計算,因此1月是0默伍,12月是11欢嘿。但是,月份里面的天數(shù)從1開始計算

靜態(tài)方法

Date.now()
now方法返回當(dāng)前距離1970年1月1日00:00:00的毫秒數(shù)

Date.parse()
parse方法用來解析日期字符串也糊,返回距離1970年1月1日 00:00:00的毫秒數(shù)

日期字符串的格式應(yīng)該完全或者部分符合YYYY-MM-DDTHH:mm:ss.sssZ格式炼蹦,Z表示時區(qū),是可選的

如果解析失敗狸剃,返回NaN

注意事項

在新建日期對象時掐隐,如果不設(shè)置時間,則認(rèn)為創(chuàng)建的是 utc 的0點(diǎn)钞馁,也就是北京時間8點(diǎn)虑省。 如果設(shè)置時間匿刮,則是北京時間當(dāng)前時間

new Date('2018-01-01')  // Mon Jan 01 2018 08:00:00 GMT+0800 (CST)
new Date('2018-01-01 00:00:00')  //Mon Jan 01 2018 00:00:00 GMT+0800 (CST)

常見應(yīng)用

  1. 去年的今天是星期幾
  2. 三十天前是的日期
  3. 距離 2019-01-01 00:00:00 還剩多少天多少小時多少分多少秒
  4. 按照如下方式格式化某個歷史時間
  • 剛剛 (距當(dāng)前時間小于一分鐘)
  • xx 分鐘前 (大于等于1分鐘,小于1個小時)
  • xx 小時前 (大于等于1小時探颈,小于1天)
  • xx 天前 (大于等于1天熟丸,小于1個月)
  • xx 月前 (大于等于1月,小于1年)
  • xx 年前 (大于等于1年)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膝擂,一起剝皮案震驚了整個濱河市虑啤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌架馋,老刑警劉巖狞山,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叉寂,居然都是意外死亡萍启,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門屏鳍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勘纯,“玉大人,你說我怎么就攤上這事钓瞭〔底瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵山涡,是天一觀的道長堤结。 經(jīng)常有香客問我,道長鸭丛,這世上最難降的妖魔是什么竞穷? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鳞溉,結(jié)果婚禮上瘾带,老公的妹妹穿的比我還像新娘。我一直安慰自己熟菲,他們只是感情好看政,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抄罕,像睡著了一般帽衙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞绵,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音恍飘,去河邊找鬼榨崩。 笑死谴垫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的母蛛。 我是一名探鬼主播翩剪,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彩郊!你這毒婦竟也來了前弯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秫逝,失蹤者是張志新(化名)和其女友劉穎恕出,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违帆,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浙巫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刷后。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片的畴。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尝胆,靈堂內(nèi)的尸體忽然破棺而出丧裁,到底是詐尸還是另有隱情,我是刑警寧澤含衔,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布煎娇,位于F島的核電站,受9級特大地震影響抱慌,放射性物質(zhì)發(fā)生泄漏逊桦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一抑进、第九天 我趴在偏房一處隱蔽的房頂上張望强经。 院中可真熱鬧,春花似錦寺渗、人聲如沸匿情。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炬称。三九已至,卻和暖如春涡拘,著一層夾襖步出監(jiān)牢的瞬間玲躯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跷车,地道東北人棘利。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像朽缴,于是被迫代替她去往敵國和親善玫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354