JavaScript 字元串 & Math & Date

来源:https://www.cnblogs.com/evenyao/archive/2018/07/22/9350755.html
-Advertisement-
Play Games

字元串 字元串就是零個或多個排在一起的字元,放在單引號或雙引號之中。 單引號字元串的內部,可以使用雙引號。雙引號字元串的內部,可以使用單引號。 多行與轉義 如果要在單引號字元串的內部,使用單引號(或者在雙引號字元串的內部,使用雙引號),就必須在內部的單引號(或者雙引號)前面加上反斜杠,用來轉義。 字 ...


字元串

字元串就是零個或多個排在一起的字元,放在單引號或雙引號之中。

'abc'
"abc"

單引號字元串的內部,可以使用雙引號。雙引號字元串的內部,可以使用單引號。

'key="value"'
"It's a long str"

多行與轉義

如果要在單引號字元串的內部,使用單引號(或者在雙引號字元串的內部,使用雙引號),就必須在內部的單引號(或者雙引號)前面加上反斜杠,用來轉義。

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

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

字元串預設只能寫在一行內,分成多行將會報錯。

'a
b
c'
// SyntaxError: Unexpected token ILLEGAL

上面代碼將一個字元串分成三行,JavaScript就會報錯。

如果長字元串必須分成多行,可以在每一行的尾部使用反斜杠。

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

longString
// "Long long long string"

上面代碼表示,加了反斜杠以後,原來寫在一行的字元串,可以分成多行,效果與寫在同一行完全一樣。註意,反斜杠的後面必須是換行符,而不能有其他字元(比如空格),否則會報錯。

連接運算符(+)可以連接多個單行字元串,用來模擬多行字元串。

var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

反斜杠在字元串內有特殊含義,用來表示一些特殊字元,所以又稱為轉義符。

如果字元串的正常內容之中,需要包含反斜杠,則反斜杠前需要再加一個反斜杠,用來對自身轉義。

var path = "C:\\games\\war3\\"

ES6擴展

多行字元串

var str =  `
你好
我是evenyao
`

字元串模板

var name = 'evenyao'
var website = 'github.com/evenyao'

var str = `你好, 我是${name},${website}`
//"你好, 我是evenyao,github.com/evenyao"

常見的字元串方法

  1. 長度計算,連接
    var str = "hello";
    console.log( str.length );
    console.log( str[0] );
    console.log( str[str.length - 1]  );
    console.log( str.charAt(0) );
    console.log( str.charCodeAt(0) );

    var str2 = " world";
    var str3 = str1 + str2;
    cosnole.log( str3 );
  1. 字元串截取
    var str = "hello world";
    var sub1 = str.substr(1, 3); // 第一個是開始位置, 第二個是長度  ell
    var sub2 = str.substring(1, 3); // 第一個是開始位置,第二個是結束位置,長度為第二個-第一個  el
    var sub3 = str.slice(1, 3); // 同上 允許負參

字元串操作不會修改原來的字元串

 

  1. 查找
    var str = "hello my world";
    var s1 = str.search('my');   //6 找不到為-1
    var s2 = str.replace('my', 'your'); //
    var s3 = str.match('my'); //返回匹配的數組
  1. 大小寫
    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

參考:關於 Math.random 的一些函數

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

Math.random() // 0.7151307314634323

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

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

 

三角函數

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開始計算。

靜態方法

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)

關於Date的應用函數

參數為時間對象毫秒數的字元串格式,返回值為字元串。假設參數為時間對象毫秒數t,根據t的時間分別返回如下字元串:

  • 剛剛( t 距當前時間不到1分鐘時間間隔)
  • 3分鐘前 (t距當前時間大於等於1分鐘,小於1小時)
  • 8小時前 (t 距離當前時間大於等於1小時,小於24小時)
  • 3天前 (t 距離當前時間大於等於24小時,小於30天)
  • 2個月前 (t 距離當前時間大於等於30天小於12個月)
  • 8年前 (t 距離當前時間大於等於12個月)
function friendlyDate(time){
  var interval = Date.now() - time;
  switch(true){
    case interval<0:
      console.log('在未來');
      break;
    case interval>=0&&interval<(60*1000):  // 距當前時間不到1分鐘時間間隔
      console.log('剛剛');
      break;
    case interval>=(60*1000)&&interval<(60*60*1000):  // 距當前時間大於等於1分鐘,小於1小時
      console.log('3分鐘前');
      break;
    case interval>=(60*60*1000)&&interval<(24*60*60*1000):  // 距離當前時間大於等於1小時,小於24小時
      console.log('8小時前');
      break;
    case interval>=(24*60*60*1000)&&interval<(30*24*60*60*1000):  // 距離當前時間大於等於24小時,小於30天
      console.log('3天前');
      break;
    case interval>=(30*24*60*60*1000)&&interval<(12*30*24*60*60*1000):  // 距離當前時間大於等於30天小於12個月
      console.log('2個月前');
      break;
    case interval>=(12*30*24*60*60*1000):  // 距離當前時間大於等於12個月
      console.log('8年前');
      break;
  }
}
friendlyDate('1504513587883');  //輸出:"剛剛"
console.log(Date.now())  //輸出:1504513614540

 

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題說明:使用的MySQL是5.1.37版本,用的mysql-connector-java-5.0.4.jar版本,在java文件中定義的欄位是Date類型,MySQL中定義的欄位類型是datetime類型的, 嘗試了以下方式都不成功,報的錯誤還是一個,方法如下: 1.第一個方法: // Date ...
  • Hive官方文檔:Home-UserDocumentation Hive DML官方文檔:LanguageManual DML 參考文章:Hive 用戶指南 1. Loading files into tables 當我們做Load操作是,hive不會做任何數據轉換,只是純複製/移動操作,將數據文件 ...
  • Hive官方文檔:Home-UserDocumentation Hive DDL官方文檔:LanguageManual DDL 參考文章:Hive 用戶指南 註意:各個語句的版本時間,有的是在 hive-1.2.1 之後才有的,這些語句我們在hive-1.2.1中是不能使用的。 註意:本文寫的都是常 ...
  • 28年前有人發明www microsoft技術開發人員lot 看論文可以看中國知網 微軟亞洲研究院 WWDC蘋果開發者大會上,蘋果都會發佈一些新的公司發展出的新的產品的新技術。iOS開發,用到的語言有:objective-c swift 還有cocoa touch框架 storyboarding(故 ...
  • 相信做前端的都做過頁面錨點定位的功能,通過`` 去設置頁面內錨點定位跳轉。 本篇文章就使用 、`scrollview`來實現android錨點定位的功能。 效果圖: 實現思路 1、監聽 滑動到的位置, 切換到對應標簽 2、 各標簽點擊, 可滑動到對應區域 自定義scrollview 因為我們需要監聽 ...
  • 因為我們須用節點spritenode.copy()把其它Scene(CircleScene.sks)里的節點拷貝一份,並把拷貝的這一份節點加到當前的scene(GameScene.sks)里,還有一個重要的註意點,就是如果要在GameScene.sks取得 Overlay內的紅色節點的準確坐標,須用... ...
  • flash交互課件能生動表達教學內容,也深受廣大教育工作者的喜愛,但是目前flash課件只能在pc電腦平臺上進行展示,且目前蘋果公司已經不再支持flash各類產品,也就是後續蘋果ios pc系統也已經不能再使用flash產品,隨著移動網路的發展,越來越多的課件產品需要移殖到各種移動平臺(手機,pad ...
  • HTML代碼 CSS代碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...