字符串&Math&date


字符串

字符串就是零個或多個排在一塊兒的字符,放在單引號或雙引號之中。前端

'abc'
"abc"
複製代碼

單引號字符串的內部,可使用雙引號。雙引號字符串的內部,可使用單引號。web

'key="value"'
"It's a long journey"
複製代碼

多行與轉義

若是要在單引號字符串的內部,使用單引號(或者在雙引號字符串的內部,使用雙引號),就必須在內部的單引號(或者雙引號)前面加上反斜槓,用來轉義。數組

'Did she say \'Hello\'?'
// "Did she say 'Hello'?"

"Did she say \"Hello\"?"
// "Did she say "Hello"?"
複製代碼

字符串默認只能寫在一行內,分紅多行將會報錯。bash

'a b c'
// SyntaxError: Unexpected token ILLEGAL
複製代碼

上面代碼將一個字符串分紅三行,JavaScript就會報錯。dom

若是長字符串必須分紅多行,能夠在每一行的尾部使用反斜槓。函數

var longString = "Long \ long \ long \ string";

longString
// "Long long long string"
複製代碼

上面代碼表示,加了反斜槓之後,原來寫在一行的字符串,能夠分紅多行,效果與寫在同一行徹底同樣。注意,反斜槓的後面必須是換行符,而不能有其餘字符(好比空格),不然會報錯。ui

鏈接運算符(+)能夠鏈接多個單行字符串,用來模擬多行字符串。spa

var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';
複製代碼

反斜槓在字符串內有特殊含義,用來表示一些特殊字符,因此又稱爲轉義符。prototype

若是字符串的正常內容之中,須要包含反斜槓,則反斜槓前須要再加一個反斜槓,用來對自身轉義。code

var path = "C:\\games\\war3\\"
複製代碼

ES6擴展

多行字符串

var str =  `
你好
這裏是飢人谷
jirengu.com
開啓你的前端之路
`
複製代碼

字符串模板

var name = '飢人谷'
var website = 'jirengu.com'

var str = `你好, 這裏是${name}${website},開啓你的前端之路`
//"你好, 這裏是飢人谷,jirengu.com,開啓你的前端之路"
複製代碼

常見的字符串方法

字符串操做不會修改原來的字符串

1.長度計算,鏈接

var str = "hello";
    console.log( str.length );
    console.log( str[0] );
    console.log( str[str.length - 1]  );
    console.log( str.charAt(0) ); // h
    console.log( str.charCodeAt(0) ); // 返回值是表示給定索引處(String中index索引處)字符的 UTF-16 代碼單元值的數字

    var str2 = " world";
    var str3 = str1 + str2;
    cosnole.log( str3 );
複製代碼

2.字符串截取

var str = "hello world";
var sub1 = str.substr(1, 3); // 第一個是開始位置, 第二個是長度  ell
var sub2 = str.substring(1, 3); // 第一個是開始位置,第二個是結束位置,長度爲第二個-第一個  el
var sub3 = str.slice(1, 3); // 同上 容許負參
複製代碼

3.查找

var str = "hello my world";
    var s1 = str.search('my');   //6 找不到爲-1
    var s2 = str.replace('my', 'your'); //
    var s3 = str.match('my'); //返回匹配的數組
複製代碼

4.大小寫

var str = "Hello";
str.toUpperCase(); // 大寫
str.toLowerCase(); // 小寫
複製代碼

Math

Math對象是JavaScript的內置對象,提供一系列數學常數和數學方法。Math對象只提供了靜態的屬性和方法,因此使用時不用實例化

屬性

Math對象提供如下一些只讀的數學常數。

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

round方法用於四捨五入

Math.round(0.1) // 0
Math.round(0.5) // 1
複製代碼

它對於負值的運算結果與正值略有不一樣,主要體如今對.5的處理

Math.round(-1.1) // -1
Math.round(-1.5) // -1
複製代碼

abs,max,min

abs方法返回參數值的絕對值

Math.abs(1) // 1
Math.abs(-1) // 1
複製代碼

max方法返回最大的參數,min方法返回最小的參數

Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1
複製代碼

floor(地板),ceil(天花板)

floor方法返回小於參數值的最大整數

Math.floor(3.2) // 3
Math.floor(-3.2) // -4
複製代碼

ceil方法返回大於參數值的最小整數

Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3
複製代碼

pow,sqrt

pow方法返回以第一個參數爲底數、第二個參數爲冪的指數值

Math.pow(2, 2) // 4
Math.pow(2, 3) // 8
複製代碼

sqrt方法返回參數值的平方根。若是參數是一個負值,則返回NaN

Math.sqrt(4) // 2
Math.sqrt(-4) // NaN
複製代碼

log,exp

log方法返回以e爲底的天然對數值

Math.log(Math.E) // 1
Math.log(10) // 2.302585092994046
複製代碼

求以10爲底的對數,能夠除以Math.LN10;求以2爲底的對數,能夠除以Math.LN2。

Math.log(100)/Math.LN10 // 2
Math.log(8)/Math.LN2 // 3
複製代碼

exp方法返回常數e的參數次方

Math.exp(1) // 2.718281828459045
Math.exp(3) // 20.085536923187668
複製代碼

random

該方法返回0到1之間的一個僞隨機數,可能等於0,可是必定小於1

Math.random() // 0.7151307314634323
複製代碼

返回一個10~20之間的整數

10 + Math.random() * 10
複製代碼

返回一個隨機數

// 返回給定範圍內的隨機數
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

// 返回給定範圍內的隨機整數
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
複製代碼

返回一個隨機的字符串

function randomstr(len) {
    var str = ''
    var dict = '0123456789abcdefghijklmnopqrstuvwxyz_'
    for(var i = 0; i < len;i++) {
        var index = Math.floor( Math.random()*dict.length )
        str += dict[index]
    }
    return str
}
var str = randomstr(11)
console.log(str)
複製代碼

三角函數

sin方法返回參數的正弦,cos方法返回參數的餘弦,tan方法返回參數的正切。

Math.sin(0) // 0
Math.cos(0) // 1
Math.tan(0) // 0
複製代碼

asin方法返回參數的反正弦,acos方法返回參數的反餘弦,atan方法返回參數的反正切。這三個方法的返回值都是弧度值。

Math.asin(1) // 1.5707963267948966
Math.acos(1) // 0
Math.atan(1) // 0.7853981633974483
複製代碼

Date

時間的表示方式

GMT

是指位於英國倫敦郊區的皇家格林尼治天文臺當地的標準時間,由於本初子午線被定義爲經過那裏的經線。

自1924年2月5日開始,格林尼治天文臺負責每隔一小時向全世界發放調時信息。

理論上來講,格林尼治標準時間的正午是指當太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點時)的時間。但因爲地球在它的橢圓軌道里的運動速度不均勻,這個時刻可能與實際的太陽時有偏差,最大偏差達16分鐘。緣由在於地球天天的自轉是有些不規則的,並且正在緩慢減速,所以格林尼治時間基於天文觀測自己的缺陷,已經被原子鐘報時的協調世界時(UTC)所取代。

UTC

協調世界時(英語:Coordinated Universal Time,法語:Temps Universel Coordonné,簡稱UTC)是最主要的世界時間標準,其以原子時秒長爲基礎,在時刻上儘可能接近於格林尼治標準時間。中華民國採用CNS 7648的《資料元及交換格式–資訊交換–日期及時間的表示法》(與ISO 8601相似)稱之爲世界協調時間。中華人民共和國採用ISO 8601:2000的國家標準GB/T 7408-2005《數據元和交換格式 信息交換 日期和時間表示法》中亦稱之爲協調世界時

CST

北京時間,又名中國標準時間,是中國大陸的標準時間,比世界協調時快八小時(即UTC+8),與香港、澳門、臺北、吉隆坡、新加坡等地的標準時間相同。

Javascript 中的 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構造函數建立一個Date的實例

var d = new Date()

    d.getTime()         //返回實例對象距離1970年1月1日00:00:00對應的毫秒數
    d.getDate()         //返回實例對象對應每月的幾號(從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)

    var d2 = new Date()
    d2.setDate()
複製代碼

##set

  • Date.prototype.setDate(date):設置實例對象對應的每月的幾號(1-31),返回改變後毫秒時間戳

  • Date.prototype.setFullYear(year [, month, date]):設置四位年份

  • Date.prototype.setHours(hour [, min, sec, ms]):設置小時(0-23)

  • Date.prototype.setMilliseconds():設置毫秒(0-999)

  • Date.prototype.setMinutes(min [, sec, ms]):設置分鐘(0-59)

  • Date.prototype.setMonth(month [, date]):設置月份(0-11)

  • Date.prototype.setSeconds(sec [, ms]):設置秒(0-59)

  • Date.prototype.setTime(milliseconds):設置毫秒時間戳

Date.prototype.toString()

toString方法返回一個完整的時間字符串

var today = new Date();
today.toString(); // "Fri Apr 03 2015 11:17:29 GMT+0800 (CST)"
複製代碼

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

toUTCString方法返回對應的UTC時間,也就是比北京時間晚8個小時。toISOString方法返回對應時間的ISO8601寫法。

var today = new Date(1362790014000);

today.toUTCString(); //

today.toISOString(); //
複製代碼

##Date.prototype.toDateString(),Date.prototype.toTimeString()

toDateString方法返回日期的字符串形式,toTimeString方法返回時間的字符串形式。

var today = new Date(1362790014000);

today.toDateString(); // "Fri Apr 03 2015"

today.toTimeString(); // "11:17:29 GMT+0800 (CST)"
複製代碼

toLocalDateString, toLocalTimeString

toLocalDateString方法返回一個字符串,表明日期的當地寫法

toLocalTimeString方法返回一個字符串,表明時間的當地寫法

var today = new Date(1362790014000);

today.toLocaleDateString(); // "2015/4/3"

today.toLocaleTimeString(); // "上午11:17:29"
複製代碼

new Date(milliseconds)

Date對象接受從1970年1月1日00:00:00 UTC開始計算的毫秒數做爲參數。這意味着若是將Unix時間戳做爲參數,必須將Unix時間戳乘以1000。

new Date(1378218728000); // Tue Sep 03 2013 22:32:08 GMT+0800 (CST)

// 1970年1月2日的零時
var Jan02_1970 = new Date(3600*24*1000); // Fri Jan 02 1970 08:00:00 GMT+0800 (CST)
複製代碼

new Date(datestring)

Date對象還接受一個日期字符串做爲參數,返回所對應的時間。全部能夠被Date.parse()方法解析的日期字符串,均可以看成Date對象的參數

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])

在多個參數的狀況下,Date對象將其分別視做對應的年、月、日、小時、分鐘、秒和毫秒。若是採用這種用法,最少須要指定兩個參數(年和月),其餘參數都是可選的,默認等於0。若是隻使用年一個參數,Date對象會將其解釋爲毫秒數。

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日零點的時間,能夠看到月份從0開始計算,所以1月是0,12月是11。可是,月份裏面的天數從1開始計算。

##時間的應用

100天之前是幾月幾號星期幾

var curTime = Date.now()
console.log(new Date(curTime - 100*24*60*60*1000))
複製代碼

靜態方法

Date.now()

now方法返回當前距離1970年1月1日00:00:00的毫秒數

Date.now(); // 1427974222853

Date.parse()

parse方法用來解析日期字符串,返回距離1970年1月1日 00:00:00的毫秒數

日期字符串的格式應該徹底或者部分符合YYYY-MM-DDTHH:mm:ss.sssZ格式,Z表示時區,是可選的

若是解析失敗,返回NaN

Date.parse("January 26, 2011 13:51:50")
Date.parse("Mon, 25 Dec 1995 13:30:00 GMT")
Date.parse("Mon, 25 Dec 1995 13:30:00 +0430")
Date.parse("2011-10-10")
Date.parse("2011-10-10 20:00:00")
Date.parse("2011-10-10T14:48:00")
複製代碼

注意事項

在新建日期對象時,若是不設置時間,則認爲建立的是 utc 的0點,也就是北京時間8點。 若是設置時間,則是北京時間當前時間。

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)
複製代碼

常見應用

1.去年的今天是星期幾 3.三十天前是的日期 3.距離 2019-01-01 00:00:00 還剩多少天多少小時多少分多少秒 4.按照以下方式格式化某個歷史時間

  • 剛剛 (距當前時間小於一分鐘)
  • xx 分鐘前 (大於等於1分鐘,小於1個小時)
  • xx 小時前 (大於等於1小時,小於1天)
  • xx 天前 (大於等於1天,小於1個月)
  • xx 月前 (大於等於1月,小於1年)
  • xx 年前 (大於等於1年)
相關文章
相關標籤/搜索