饑人谷學(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)用
- 去年的今天是星期幾
- 三十天前是的日期
- 距離 2019-01-01 00:00:00 還剩多少天多少小時多少分多少秒
- 按照如下方式格式化某個歷史時間
- 剛剛 (距當(dāng)前時間小于一分鐘)
- xx 分鐘前 (大于等于1分鐘,小于1個小時)
- xx 小時前 (大于等于1小時探颈,小于1天)
- xx 天前 (大于等于1天熟丸,小于1個月)
- xx 月前 (大于等于1月,小于1年)
- xx 年前 (大于等于1年)