整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          常用正則表達式最強整理(速查手冊)

          常用正則表達式最強整理(速查手冊)

          、校驗數字的表達式

          1. 數字:^[0-9]*$
          2. n位的數字:^\d{n}$
          3. 至少n位的數字:^\d{n,}$
          4. m-n位的數字:^\d{m,n}$
          5. 零和非零開頭的數字:^(0|[1-9][0-9]*)$
          6. 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
          7. 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$
          8. 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$
          9. 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
          10. 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
          11. 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
          12. 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
          13. 非負整數:^\d+$ 或 ^[1-9]\d*|0$
          14. 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
          15. 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
          16. 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
          17. 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
          18. 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
          19. 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

          二、校驗字符的表達式

          1. 漢字:^[\u4e00-\u9fa5]{0,}$
          2. 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
          3. 長度為3-20的所有字符:^.{3,20}$
          4. 由26個英文字母組成的字符串:^[A-Za-z]+$
          5. 由26個大寫英文字母組成的字符串:^[A-Z]+$
          6. 由26個小寫英文字母組成的字符串:^[a-z]+$
          7. 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
          8. 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}
          9. 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
          10. 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
          11. 可以輸入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
          12. 禁止輸入含有~的字符[^~\x22]+

          其它:

          .*匹配除 \n 以外的任何字符。

          /[\u4E00-\u9FA5]/ 漢字

          /[\uFF00-\uFFFF]/ 全角符號

          /[\u0000-\u00FF]/ 半角符號

          三、特殊需求表達式

          1. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
          2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
          3. InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
          4. 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
          5. 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
          6. 國內電話號碼(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
          7. 身份證號(15位、18位數字):^\d{15}|\d{18}$
          8. 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
          9. 帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
          10. 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$
          11. 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
          12. 日期格式:^\d{4}-\d{1,2}-\d{1,2}
          13. 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
          14. 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

          錢的輸入格式:

          1.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

          2.這表示任意一個不以0開頭的數字,但是,這也意味著一個字符"0"不通過,所以我們采用下面的形式:^(0|[1-9][0-9]*)$

          3.一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$

          4.這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下面我們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$

          5.必須說明的是,小數點后面至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$

          6.這樣我們規定小數點后面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$

          7.這樣就允許用戶只寫一位小數.下面我們該考慮數字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

          8.1到3個數字,后面跟著任意個 逗號+3個數字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

          備注:這就是最終結果了,別忘了+可以用*替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這里

          1. xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
          2. 中文字符的正則表達式:[\u4e00-\u9fa5]
          3. 雙字節字符:[^\x00-\xff] (包括漢字在內,可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))
          4. 空白行的正則表達式:\n\s*\r (可以用來刪除空白行)
          5. HTML標記的正則表達式:<(\S*?)[^>]*>.*?</>|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對于復雜的嵌套標記依舊無能為力)
          6. 首尾空白字符的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式)
          7. 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
          8. 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數字)
          9. IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用)
          10. IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
          11. IP-v4地址:\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b (提取IP地址時有用)
          12. 校驗IP-v6地址:(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
          13. 子網掩碼:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
          14. 校驗日期:^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$(“yyyy-mm-dd“ 格式的日期校驗,已考慮平閏年。)
          15. 抽取注釋:<!--(.*?)-->
          16. 查找CSS屬性:^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}
          17. 提取頁面超鏈接:(<a\s*(?!.*\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\.)?'.implode('|(?:www\.)?', $follow_list).'))[^" rel="external nofollow" ]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>
          18. 提取網頁圖片:\< *[img][^\\>]*[src] *=*[\"\']{0,1}([^\"\'\ >]*)
          19. 提取網頁顏色代碼:^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
          20. 文件擴展名效驗:^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$
          21. 判斷IE版本:^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$

          附表:

          別人過閏月生日,你也期待過嗎?我期待過。

          假設還有120多歲壽命(活到2142年),從今年開始,還有一共46個農歷閏年。

          你是農歷幾月生,看下表可知“雙生日年份”:

          由上表可知農歷十二月、一月、十月的人沒有一年兩次過生日的機會,而閏十一月(又被稱為閏冬月)機會也很少。不是誰都有過閏月生日的機會。

          注意

          從120年看,似乎閏十月很少,閏一月也沒有。實際上在更大的時間范圍內,正真稀少的是閏十二月

          公元1645-公元2796年閏月分布頻數圖,851年里面一個閏十二月都沒有。

          閏月分布根源

          閏月來源:把二十四節氣分為節氣和中氣,每個中氣必須落在指定的月份,如果月份過去了中氣還沒到,那么就要閏一個月來保證這個中氣落在這個月份里。

          自然界很多現象都呈正態分布,閏月分布頻數圖也是。但是,閏月呈現出四五六七月份多,十一、十二、一月少(夏多冬少)的狀況是因為地球繞太陽公轉------遠日點離太陽遠,公轉慢,時間長,兩個中氣的間隔大,所以在這段時期及其前后的歷月中,不包含中氣的機會就多,這就是閏四、五、六月次數最多的原因。近日點相反,所以置閏的機會自然就會少一些。


          參考資料:

          https://www.rili.com.cn/nonglizhishi/1720.html

          https://zhidao.baidu.com/question/1709035843620833500.html

          https://www.zhihu.com/question/22485145

          內容是《Web前端開發之Javascript視頻》的課件,請配合大師哥《Javascript》視頻課程學習。

          Date日期對象:用于處理日期和時間。

          基本概念:

          GMT:(Greenwich Mean Time)格林尼治標準時(格林威治),這個時間系統的概念在 1884 年確立,由英國倫敦的格林威治皇家天文臺(即本初子午線的位置)計算并維護。

          UTC:(Universal Time Code 通用時間),也叫格林尼治標準時間,(也稱為:協調世界時、世界統一時間、世界標準時間、國際協調時間)。

          時區:由于各國家與地區經度不同,地方時也有所不同; 1884年在華盛頓召開的一次國際經度會議,把全球劃分為不同的時區,每隔經度15°劃分一個時區,其被劃分為24個時區,分為東12區和西12區。

          夏令時:(Summer time),又稱日光節約時、日光節約時間,是一種為節約能源而人為規定地方時間的制度,在這一制度實行期間所采用的統一時間稱為“夏令時間”。

          計算機元年(紀年):1970年1月1日0時0分0秒作為計算機元年,用于計時的開始。

          時間戳:是一個自增的整數,它表示從1970年1月1日零時整的GMT時區開始的那一刻,到現在的毫秒數,時間戳可以精確地表示一個時刻,并且與時區無關。

          Date使用的是UTC;是所有時區的基準標準時間,是1970年1月1日凌晨0點0分0秒開始經過的毫秒數保存日期;

          在使用這種數據存儲格式的條件下,Date()類型保存的日期能夠精確到70年1月1日之前或之后的100 000 000天。

          Date對象創建

          使用Date()構造函數,語法:var now=Date();

          var d = new Date();  //以當前日期和時間創建Date對象
          var d = new Date(0);  //以距離1970.1.1:00:00:00的毫秒數創建Date對象
          var d = new Date(2020,7,18);
          console.log(d);

          new Date()的參數很多種形式,每種都表示不同的含義;

          如果傳值為 0,會得到一個表示 1970年1月1日的Date 對象;

          或者使用Date()函數,但本質上不一樣,輸出也不一樣,實質上是一個轉換函數;

          說明:因為要傳入是表示該日期的毫秒數(即從UTC時間70年1月1日前夜起到該日期止的毫秒數)。為了簡化這一計算過程,ECMAScript提供了兩個靜態方法:Date.parse()和Date.UTC();

          Date.parse()方法接受一個表示日期的字符串參數,返回一個時間戳(毫秒數);

          日期字符串應該符合 RFC 2822 和 ISO 8061 這兩個標準,ISO 8601擴展格式 YYYY-MM-DDTHH:mm:ss:ssssZ,如:2020-05-25T00:00:00;(yyyy4位年份、MM月份、DD天、HH時、mm分、ss秒、ssss毫秒)

          通常見的日期格式:

          mm/dd/yyyy 如: 3/21/2009,即月/日/年

          yyyy/mm/dd 如: 2009/3/21

          mmmm dd,yyyy 如: Apr 21,2009,即英文月名 日,年,即January 12,2010

          英文星期幾 月 日 年 時:分:秒 時區,如:Tue May 25 2020 00:00:00 GMT-0700

          var d = Date.parse("May 25,2020");
          Date.parse('2018-07-22')
          Date.parse('2018-07')
          Date.parse('2018')
          Date.parse('07/22/2018')
          Date.parse('2018/07/22')
          Date.parse('2018/7/22')
          Date.parse('July 22, 2018')
          Date.parse('July 22, 2018 07:22:13')
          Date.parse('2018-07-22 07:22:13')
          Date.parse('2018-07-22T07:22:13')

          注:如果傳入Date.parse()方法的字符串不能表示日期,那么它會返回NaN;

          根據parse()返回值創建Date對象;

          var d = new Date(Date.parse("May 25, 2020"));

          實際上,如果直接將表示日期的字符串傳遞給Date構造函數,也會在后臺調用Date.parse(),兩者是等價的,如:

          var d = new Date("May 25, 2020");

          注:日期對象在不同瀏覽器實現的并不統一,比如,傳入了超出范圍的值:

          var d = new Date("January 33,2020");

          在解析January 33,2020,有些瀏覽器返回:Invalid Date;IE返回:Sun Feb 02 2020(把超出的時間往后自動推算);

          可以在月份或者日期字段添加或省略前導零;

          console.log(new Date('2020-6-6'));
          console.log(new Date('2020-06-06'));
          console.log(new Date('2020-06-06 09:18:15'));
          console.log(new Date('2020-06-06T09:18:15'));
          console.log(new Date('2020-06'));
          console.log(new Date('2020'));
          console.log(new Date('06/07/2020'));
          console.log(new Date('2020/06/07'));
          console.log(new Date('2020/6/7'));
          console.log(new Date('2020.6.7'));
          console.log(new Date('2020.6.7 15:18:15'));
          console.log(new Date('July 18, 2020'));
          console.log(new Date('July 18, 2020 09:30:28'));
          console.log(new Date('18 July 2020'));
          console.log(new Date('18 July, 2020'));
          console.log(new Date('18 July 2020 09:30:28'));
          console.log(new Date('July 2020'));

          其實Date在內部是使用時間戳實現的;

          var d = new Date(1591866649132)
          console.log(d);

          UNIX 時間戳的原因以秒(seconds)為單位。JavaScript 以毫秒(milliseconds)為單位記錄時間。

          可在使用UNIX 時間戳去實例化Date 對象;

          var timestamp = 1591866649;
          var d = new Date(timestamp * 1000);
          console.log(d);

          Date.UTC()方法:

          返回表示日期的毫秒數,但它與Date.parse()在構建值時使用不同的信息,即與當前所在的時區相關,生成的日期都相對于計算機的時區;

          語法:Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]]);

          其參數為日期中的年,月(基于0),日,小時(0到23),分,秒,毫秒,其中年月必選;如果沒有提供日,默認為1,如果省略其他參數,則統統默認為0;

          至少應該是3個參數,但是大多數 JavaScript 引擎都能解析 2 個或 1 個參數;

          var d = Date.UTC(2020);
          var d = Date.UTC(2020,6);  // 毫秒數1593561600000
          var d=new Date(Date.UTC(2020,6)); 
          var d = new Date(Date.UTC(2020,6,6,17,55,55)); // 自動添加時區,返回當地日期和時間
          var d=new Date(2020,6,10); //月份從0開始,6即是7月
          console.log(d);

          如果沒有任何關于時區的信息,會將日期視為 UTC ,并自動執行到當前計算機時區的轉換;

          可以直接把UTC參數傳遞給Date()構造函數,如:

          var d=new Date(2020,6); // Wed Jul 01 2020 00:00:00 GMT+0800 
          var d = new Date(2020,6,6,17,55,55); // 即為GMT時間
          console.log(d);

          時區:

          當初始化一個 Date 對象時可以選擇時區,可以通過添加 +HOURS 的格式,或者通過一個被圓括號包裹的時區名來描述一個時區:

          console.log(new Date());
          console.log(new Date('Jun 7,2020 13:51:01 +0700'));
          console.log(new Date('Jun 7,2020 13:51:01 (CET)'));   // CET歐洲中部時間

          如果你使用時區名的方式但在圓括號中定義了一個錯誤的時區名,JavaScript 將會靜默地將時區設置為默認的 UTC。

          如果你使用 +HOURS 的方式但傳入的數字格式是錯誤的,JavaScript 將會拋出一個 “Invalid Date” 的 Error。

          繼承的方法:

          與其他引用類型一樣,Date類型也重寫了toLocaleString()、toString()和valueOf()方法;但這些方法的返回值與其他類型中的方法不同。

          valueOf()方法:返回日期的毫秒數;

          toString()方法:通常返回帶有時區信息的日期和時間;其中時間一般以軍用時間(即小時從0到23);

          toLocaleString():會按照與瀏覽器設置的地區相適應的格式返回日期和時間;即時間格式中會包含AM或PM,但不會包含時區信息;

          var d=new Date(2020,6); // Wed Jul 01 2020 00:00:00 GMT+0800 
          var d = new Date(2020,6,6,17,55,55); // 即為GMT時間
          console.log(d);

          注:真實場景中,toString()和toLocaleString()沒有什么用,僅在調試代碼時使用;

          至于valueOf()方法,返回的是毫秒數,因此,可以方便的使用比較操作來比較日期,如:

          console.log(new Date());
          console.log(new Date('Jun 7,2020 13:51:01 +0700'));
          console.log(new Date('Jun 7,2020 13:51:01 (CET)'));   // CET歐洲中部時間

          注意日期比較的慣性思維,如2019.1.1早于2020.2.1日,但后者返回的毫秒數大。

          Date對象方法:

          • Date():返回當日的日期和時間。
          • getDate():從 Date 對象返回一個月中的某一天 (1 ~ 31)。
          • getDay():從 Date 對象返回一周中的某一天 (0 ~ 6)。
          • getMonth():從 Date 對象返回月份 (0 ~ 11)。
          • getFullYear():從 Date 對象以四位數字返回年份。
          • getYear():請使用 getFullYear() 方法代替。
          • getHours():返回 Date 對象的小時 (0 ~ 23)。
          • getMinutes():返回 Date 對象的分鐘 (0 ~ 59)。
          • getSeconds():返回 Date 對象的秒數 (0 ~ 59)。
          • getMilliseconds():返回 Date 對象的毫秒(0 ~ 999)。
          • getTime():返回 1970 年 1 月 1 日至今的毫秒數,與valueOf()返回值相同。
          • getTimezoneOffset():返回本地時間與格林威治標準時間 (GMT) 的分鐘差。
          • getUTCDate():根據世界時從 Date 對象返回月中的一天 (1 ~ 31)。
          • getUTCDay():根據世界時從 Date 對象返回周中的一天 (0 ~ 6)。
          • getUTCMonth():根據世界時從 Date 對象返回月份 (0 ~ 11)。
          • getUTCFullYear():根據世界時從 Date 對象返回四位數的年份。
          • getUTCHours():根據世界時返回 Date 對象的小時 (0 ~ 23)。
          • getUTCMinutes():根據世界時返回 Date 對象的分鐘 (0 ~ 59)。
          • getUTCSeconds():根據世界時返回 Date 對象的秒鐘 (0 ~ 59)。
          • getUTCMilliseconds():根據世界時返回 Date 對象的毫秒(0 ~ 999)。
          • parse():返回1970年1月1日午夜到指定日期(字符串)的毫秒數。
          • setDate():設置 Date 對象中月的某一天 (1 ~ 31)。
          • setMonth():設置 Date 對象中月份 (0 ~ 11)。
          • setFullYear():設置 Date 對象中的年份(四位數字)。
          • setYear():請使用 setFullYear() 方法代替。
          • setHours():設置 Date 對象中的小時 (0 ~ 23)。
          • setMinutes():設置 Date 對象中的分鐘 (0 ~ 59)。
          • setSeconds():設置 Date 對象中的秒鐘 (0 ~ 59)。
          • setMilliseconds():設置 Date 對象中的毫秒 (0 ~ 999)。
          • setTime():以毫秒設置 Date 對象。
          • setUTCDate():根據世界時設置 Date 對象中月份的一天 (1 ~ 31)。
          • setUTCMonth():根據世界時設置 Date 對象中的月份 (0 ~ 11)。
          • setUTCFullYear():根據世界時設置 Date 對象中的年份(四位數字)。
          • setUTCHours():根據世界時設置 Date 對象中的小時 (0 ~ 23)。
          • setUTCMinutes():根據世界時設置 Date 對象中的分鐘 (0 ~ 59)。
          • setUTCSeconds():根據世界時設置 Date 對象中的秒鐘 (0 ~ 59)。
          • setUTCMilliseconds():根據世界時設置 Date 對象中的毫秒 (0 ~ 999)。
          • toSource():返回該對象的源代碼。
          • toString():把 Date 對象轉換為字符串。
          • toTimeString():把 Date 對象的時間部分轉換為字符串。
          • toDateString():把 Date 對象的日期部分轉換為字符串。
          • toGMTString():請使用 toUTCString() 方法代替。
          • toUTCString():根據世界時,把 Date 對象轉換為字符串。
          • toLocaleString():根據本地時間格式,把 Date 對象轉換為字符串。
          • toLocaleTimeString():根據本地時間格式,把 Date 對象的時間部分轉換為字符串。
          • toLocaleDateString():根據本地時間格式,把 Date 對象的日期部分轉換為字符串。
          • toISOString():返回對應的UTC時間的 ISO8601 寫法,如2012-12-31T16:00:00.000Z,
          • toJSON():返回值同toISOString()
          • UTC():根據世界時返回 1970 年 1 月 1 日 到指定日期的毫秒數。
          • valueOf():返回 Date 對象的原始值。

          以上方法大概分為三種:to方法、get方法和set方法。

          to方法-日期格式化方法:

          date()類型還有一些專門用于將日期格式化為字符串的方法,如:

          • toString():
          • toDateString():以特定于實現的格式顯示星期幾、月、日和年;
          • toTimeString():以特定于實現的格式顯示時、分、秒和時區;
          • toLocaleDateString():以特定于地區的格式顯示星期幾、月、日和年;
          • toLocaleTimeString():在特定于地區的格式顯示 時、分、秒;
          • toUTCString():以特定于實現的格式顯示UTC日期;
          • toISOString():返回ISO表示的日期;
          • toGMTString()方法,這是一個與toUTCString()等價的方法,其存在的目的在于確保向后兼容;不過ECMAScript推薦使用toUTCString()方法;

          getter方法:

          用于獲取當前日期時間信息;

          var d = new Date();
          console.log(d.getDate()); //18
          console.log(d.getDay());  //4
          console.log(d.getFullYear()); //2020
          console.log(d.getMonth()); //5 (starts from 0)
          console.log(d.getHours()); //17
          console.log(d.getMinutes()); //30
          console.log(d.getSeconds()) //13
          console.log(d.getMilliseconds()); //765
          console.log(d.getTime()) //1591868420160
          console.log(d.getTimezoneOffset()); //-480 返回以分鐘為單位表示的時區差異

          getTimezoneOffset()方法用于說明某個時區與UTC時間的關系,該方法返回當前時區比UTC提前或落后的分鐘數; 還可以用于判斷該時區是否使用夏令時:

          var d1=new Date(2020, 0, 1);
          var d2=new Date(2020, 6, 1);
          console.log(d1.getTimezoneOffset());  // -480 / 60 = -8小時
          var b=d1.getTimezoneOffset() != d2.getTimezoneOffset();  // 判斷夏令時
          console.log(b);

          這些方法有等效的UTC版本,它們返回UTC值而不是適合您當前時區的值

          var d = new Date();
          console.log(d.getUTCDate()); //18
          console.log(d.getUTCDay());  //4
          console.log(d.getUTCFullYear()); //2020
          console.log(d.getUTCMonth()); //5 (starts from 0)
          console.log(d.getUTCHours()); //9
          console.log(d.getUTCMinutes()); //30
          console.log(d.getUTCSeconds()) //13
          console.log(d.getUTCMilliseconds()); //765

          setter方法:

          var d = new Date();
          d.setDate(6);
          d.setFullYear(2022);
          d.setMonth(4);
          d.setHours(4);
          d.setMinutes(4);
          d.setSeconds(4);
          d.setMilliseconds(123);
          d.setTime(1598765678999);
          console.log(d);

          注:setDate 和 setMonth 從 0 開始編號;

          這些方法基本是跟getter方法一一對應的,但是沒有setDay方法,因為星期幾是計算出來的,而不是設置的;

          set方法中的參數如果超出它的范圍,會進位,稱為冒泡,如:date.setHours(48),這也會將日期數變大;

          var date = new Date();
          date.setFullYear(2022,1,18);
          // date.setMonth(24);
          date.setMonth(2,8);
          date.setHours(16,18,28,208);
          console.log(date.toLocaleString());

          如果參數是負數,表示從上個月的最后一天開始減去相應的單位數:

          以上的方法都有一個相對應的 UTC set方法:

          var d = new Date();
          d.setUTCDate(6);
          d.setUTCFullYear(2022);
          d.setUTCMonth(4);
          d.setUTCHours(4);
          d.setUTCMinutes(4);
          d.setUTCSeconds(4);
          d.setUTCMilliseconds(123);
          console.log(d);

          獲取當前時間戳:

          console.log(new Date().getTime());
          console.log(Date.now());

          Date.now()方法返回表示調用這個方法時的日期和時間的毫秒數;其簡化了Date.getTime()方法,如:

          var start = Date.now();
          for(var i=0;i<100000;i++){} // 模擬其他處理代碼
          var stop = Date.now();
          var result = stop-start;
          alert(result);

          如果有些瀏覽器不支持Date.now(),可以使用+操作符獲取Date對象的時間戳,如:

          var start = +new Date();
          for(var i=0;i<100000;i++){} // 模擬其他處理代碼
          var stop = +new Date();
          var result = stop-start;
          alert(result);

          日期的計算:

          直接加減或通過 Date.getTime() 的值來比較兩個 Date 對象:

          var d1 = new Date("2020-06-18");
          var d2 = new Date("2020-06-19");
          console.log(d1 - d2);  // -86400000
          console.log(d1 + d2);  // 返回兩個日期的字符串拼接
          // 或
          var d1 = new Date('July 18,2020 14:10:18');
          var d2 = new Date('July 19,2020 14:10:18');
          var diff = d2.getTime() - d1.getTime();
          console.log(diff);

          注:getTime() 方法返回以毫秒計的數字,所以需要將當日時刻計入;如:July 18, 2020 14:14:14 不等于July 18, 2020。在這種情況下,可以使用 setHours(0, 0, 0, 0) 來重置當日時刻;

          計算本年度還剩下多少天:

          function leftDays() {
            var today = new Date();
            var endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59, 999);
            var msPerDay = 24 * 60 * 60 * 1000;
            return Math.round((endYear.getTime() - today.getTime()) / msPerDay);
          }
          console.log(leftDays());

          小練習:

          // 中文月份和星期
          var d = new Date();
          var month = d.getMonth();
          var week = d.getDay();
          var monthArr = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
          var weekArr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
          console.log(monthArr[month]);
          console.log(weekArr[week]);
           
          // 獲取日期部分信息
          Date.prototype.datePart = function(part){
              if(!part)
                  part = 'd';
              var weekArr = ['日','一','二','三','四','五','六'];
              switch(part){
                  case 'Y':
                  case 'y': 
                      return this.getFullYear(); 
                      break;
                  case 'M': 
                      return this.getMonth + 1;
                      break;
                  case 'W':
                  case 'w':
                      return weekArr[this.getDay()];
                      break;
                  case 'D':
                  case 'd':
                      return this.getDate();
                      break;
                  case 'H':
                  case 'h':
                      return this.getHours();
                      break;
                  case 'm':
                      return this.getMinutes();
                      break;
                  case 's':
                      return this.getSeconds();
                      break;
                  default:
                      return this.getDate();
              }
              return this.getDate();
          }
          console.log(new Date().datePart('d'));

          還有多長時間退休:

          // 一個人到退休還有多長時間
          function retireDays(birthday,age){
              var d1 = new Date(birthday).getFullYear();
              var d2 = new Date().getFullYear();
              var old = d2 - d1;
              console.log("現在你的年齡是:" + old,",將于" + (d1 + age) + "退休");
              if(age - old > 0){
                  console.log("還差"+(age - old)+"年退休")
              }else{
                  console.log("你已經退休啦,好好享受老年生活吧");
              }
          }
          retireDays('2020.6.6',60);

          倒計時:

          <!-- 網頁時鐘 -->
          <p id="mydate"></p>
          <script>
          function checkTime(i){
              if(i<10)
                  i = '0' + i;
              return i;
          }
          function startTime(){
              var d = new Date();
              var h = d.getHours();
              var m = checkTime(d.getMinutes());
              var s = checkTime(d.getSeconds());
              document.getElementById('mydate').innerHTML = h + ':' + m + ':' + s;
              timer = setTimeout('startTime()', 1000);
          }
          startTime();
           
          // 倒計時
          function getCountDown(d){
              var d1 = new Date();
              var d2 = new Date(d);  // 
              var diff = d2 - d1;     // 相差毫秒數
              var o = {};
              if(diff >= 0){
                  var day = Math.floor(diff / 1000 / 60 / 60 / 24);  // 剩下多少天
                  var hour = Math.floor(diff / 1000 / 60 / 60 % 24);   // 剩下多少小時
                  var minute = Math.floor(diff / 1000 / 60 % 60);     // 剩下多少分
                  var second = Math.floor(diff / 1000 % 60);  // 剩下多少秒
                  o.stop = false;
                  o.str = "距離"+d+",還剩下"+day+"天"+hour+"小時"+minute+"分"+second+"秒";
              }else{
                  o.stop = true;
                  o.str = "已時結束";
              }
              return o;
          }
          var timer = setInterval(function(){
              var mydate = document.getElementById('mydate');
              mydate.innerHTML = getCountDown('2020.6.8').str;
              if(getCountDown('2020.6.8').stop) clearInterval(timer);
          },1000);

          計算某個日期加上天數:

          // 計算加幾天后的日期,days可以使用負數
          // 如果計算月份,是一樣的原理
          function addDate(date,days){
              var d = new Date(date);
              d.setDate(d.getDay() + days);
              var month = d.getMonth() + 1;
              var day = d.getDate();
              if(month < 10)
                  month = "0" + month;
              if(day < 10)
                  day = "0" + day;
              var value = d.getFullYear() + "-" + month + "-" + day;
              return value;
          }
          console.log(addDate('2020-6-6',50));
          console.log(addDate('2020-6-6',-6));

          小練習:

          // 判斷閏年:四年一閏,百年不閏,四百年再閏
          Date.prototype.isLeapYear = function(){
              return (this.getFullYear() % 4 == 0 && ((this.getFullYear() % 100 !=0) || (this.getFullYear() % 400 == 0)));
          }
          var d = new Date();
          console.log(d.isLeapYear());
          d.setFullYear(2019);
          console.log(d.isLeapYear());
           
          // 計算兩個日期的天數差
          function daysDiff(dateOne,dateTwo){
              var oneMonth = dateOne.substring(5, dateOne.lastIndexOf('-'));
              var oneDay = dateOne.substring(dateOne.length,dateOne.lastIndexOf('-') + 1);
              var oneYear = dateOne.substring(0, dateOne.indexOf('-'));
              var twoMonth = dateTwo.substring(5, dateTwo.lastIndexOf('-'));
              var twoDay = dateTwo.substring(dateTwo.length, dateTwo.lastIndexOf('-') + 1);
              var twoYear = dateTwo.substring(0, dateTwo.indexOf('-'));
              var diff = ((Date.parse(oneMonth+'/'+oneDay+'/'+oneYear) - Date.parse(twoMonth+'/'+twoDay+'/'+twoYear)) / 86400000);
              return diff;
          }
          console.log(daysDiff('2020-6-6','2020-5-30'));

          格式化輸出:

          Date.prototype.format = function(fmt){
              var o = {
                  "M+" : this.getMonth() + 1,
                  "d+" : this.getDate(),
                  "h+" : this.getHours(),
                  "m+" : this.getMinutes(),
                  "s+" : this.getSeconds(),
                  "q+" : Math.floor((this.getMonth() + 3) / 3),
                  "S"  : this.getMilliseconds()
              };
              if(/(y+)/.test(fmt)){
                  fmt = fmt.replace(RegExp.$1,
                      (this.getFullYear() + "").substr(4 - RegExp.$1.length));
              }
              for(var k in o){
                  if(new RegExp("(" + k + ")").test(fmt)){
                      fmt = fmt.replace(RegExp.$1,
                          RegExp.$1.length ===1
                              ? o[k]
                              : ("00" + o[k]).substr(("" + o[k]).length));
                  }
              }
              return fmt;
          };
          var d = new Date(2020,6,6,0,0,0);
          console.log(d);
          console.log(d.format('yyyy年MM月dd日'));  // 2020年07月06日
          console.log(d.format('yyyy年MM月d日 hh:mm:ss'));  // 2020年07月6日 00:00:00

          Intl對象:

          Intl 對象是 ECMAScript 國際化 API 的一個命名空間,它提供了精確的字符串對比(Collator ),數字格式化(NumberFormat),日期和時間格式化(DateTimeFormat)等對象。

          var date = new Date();
          console.log(date);
          console.log(Intl.DateTimeFormat().format(date));  // 2020/7/22
          console.log(new Intl.DateTimeFormat('en-US').format(date));  // 6/7/2020

          Intl對象的屬性:

          • Intl.Collator:collators的構造函數,用于啟用對語言敏感的字符串比較的對象。
          • Intl.DateTimeFormat:用于啟用語言敏感的日期和時間格式的對象的構造函數。
          • Intl.ListFormat:啟用語言敏感列表格式的對象的構造函數。
          • Intl.NumberFormat:用于啟用語言敏感數字格式的對象的構造函數。
          • Intl.PluralRules:用于啟用多種敏感格式和多種語言語言規則的對象的構造函數。
          • Intl.RelativeTimeFormat:對象的構造函數,該對象啟用對語言敏感的相對時間格式。

          Intl.DateTimeFormat:

          語法:

          new Intl.DateTimeFormat([locales[, options]])
          Intl.DateTimeFormat([locales[, options]])

          參數:

          locales:可選,縮寫語言代碼(BCP 47 language tag),如:cmn-Hans-CN)的字符串或者這些字符串組成的數組;

          兩種擴展的格式:language[-scripts][-region]-u-nu-* 和 language[-scripts][-region]-u-ca-* ;例如:zh-u-nu-hanidec(表示中文十進制數字) 和 zh-u-ca-chinese(表示中國日歷,比如壬辰年冬月8日) ,也可以 nu 和 ca 組合使用,如使用:zh-u-ca-chinese-nu-hanidec 格式化Date.now()的返回值類似于"丙申年冬月九日";

          nu:編號系統,可能的值包括:

          "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".

          ca:日歷,可能的值包括:

          "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

          var date = new Date();
          // 韓國使用 year-month-day 格式
          console.log(new Intl.DateTimeFormat('ko-KR').format(date));
          // 2020. 6. 18
           
          //大部分阿拉伯國家使用阿拉伯字母(real Arabic digits)
          console.log(new Intl.DateTimeFormat('ar-EG').format(date));
          // "???/???/????"
           
          //在日本,應用可能想要使用日本日歷,
          //2020 是平成32年(平成是是日本天皇明仁的年號,由1989年1月8日起開始計算直至現在)
          console.log(new Intl.DateTimeFormat('ja-JP-u-ca-japanese').format(date));
          // 類似"平成32/6/20"
           
          //當請求一個語言可能不支持,如巴厘(ban),若有備用的語言印尼語(id),
          //那么將使用印尼語(id)
          console.log(new Intl.DateTimeFormat(['ban', 'id']).format(date));
          // "20/6/2020"
           
          console.log(new Intl.DateTimeFormat('zh-CN').format(date));  // 2020/6/11
          console.log(new Intl.DateTimeFormat('zh-u-nu-hanidec').format(date)); //二〇二〇/六/一一
          console.log(new Intl.DateTimeFormat('zh-u-ca-chinese').format(date));//37/閏4/20
          console.log(new Intl.DateTimeFormat('zh-u-ca-chinese-nu-hanidec').format(date));//三七/閏四/二〇

          options參數:

          可選,自定義輸出,包含一些或所有的下面屬性:

          localeMatcher:

          使用的local的匹配算法. 可能的值有"lookup"和"best fit"; 默認值 "best fit";

          timeZone:

          使用的時區. 這唯一的值實現必須被標準世界時間(UTC)所識別。默認值是運行時的默認時區. IANA time zone database中的時區名稱可能會被識別, 例如"Asia/Shanghai", "Asia/Kolkata", "America/New_York";

          hour12:

          是否使用12小時時間制(而不是24小時的時間),值是true 或 false; 默認值是根據locale來自動決定的(中國地區的默認值為true);

          formatMatcher:

          format的匹配算法,值有"basic"和"best fit",默認值是"best fit";

          日期時間插件被格式化輸出時可以使用的屬性集合描述。實現需要支持是以下子集中的其中一個:

          • weekday, year, month, day, hour, minute, second
          • weekday, year, month, day
          • year, month, day
          • year, month
          • month, day
          • hour, minute, second
          • hour, minute

          實現可能支持其他的子集,并通過對所有可用的子集對比找到最匹配的子集。通過 formatMatcher屬性可以設置兩種算法用于對比和選擇子集: 完全匹配"basic"算法和一種依賴于“best fit”算法的實現;

          • weekday:工作日的展現方式.可能的值有 "narrow", "short", "long".
          • era:紀元的展現方式. 可能的值有 "narrow", "short", "long".
          • year:年的展現方式. 可能的值有 "numeric", "2-digit".
          • month:月的展現方式. 可能的值有 "numeric", "2-digit", "narrow", "short", "long".
          • day:日的展現方式.可能的值有 "numeric", "2-digit".
          • hour:時的展現方式.可能的值有 "numeric", "2-digit".
          • minute:分鐘的展現方式.可能的值有 "numeric", "2-digit".
          • second:秒的展現方式. 可能的值有"numeric", "2-digit".
          • timeZoneName:時區名稱的展現方式.可能的值有 "short", "long".

          每個日期時間組件屬性的默認值都是undefined,但是若所有的組件屬性都是undefined,那么year, month和day的值就都被認為是"numeric";

          var date = new Date();
          var options = {year:'numeric',month:'numeric',day:'numeric',hour:'numeric',minute:'numeric',second:'numeric'};
          console.log(new Intl.DateTimeFormat('en-US').format(date));  // 6/7/2020
          console.log(new Intl.DateTimeFormat('en-US',options).format(date));  // 6/7/2020, 3:07:31 PM
          console.log(new Intl.DateTimeFormat('it-IT').format(date));  // 7/6/2020
          console.log(new Intl.DateTimeFormat('it-IT',options).format(date));  // 7/6/2020, 15:08:34
           
          var date = new Date(Date.UTC(2020, 6, 18, 6, 30, 18));
           
          //請求參數(options)中包含參數星期(weekday),并且該參數的值為長類型(long)
          var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
          console.log(new Intl.DateTimeFormat('zh-CN', options).format(date));
          console.log(new Intl.DateTimeFormat('de-DE', options).format(date));
          // Samstag, 18. Juli 2020
           
          // 一個應用使用 世界標準時間(UTC),并且UTC使用短名字(short)展示
          options.timeZone = 'UTC';
          //若不寫這一行那么仍然顯示的是世界標準時間;但是UTC三個字母不會顯示
          options.timeZoneName = 'short';
          console.log(new Intl.DateTimeFormat('en-US', options).format(date));
          // Saturday, July 18, 2020, UTC
           
          // 更精確的定義
          options = {
            hour: 'numeric', minute: 'numeric', second: 'numeric',
            timeZoneName: 'short'
          };
          console.log(new Intl.DateTimeFormat('en-US', options).format(date));
          // 12:30:18 PM GMT+8
           
          // 使用24小時制
          options = {
            year: 'numeric', month: 'numeric', day: 'numeric',
            hour: 'numeric', minute: 'numeric', second: 'numeric',
            hour12: false
          };
          console.log(date.toLocaleString('en-US', options));  // 7/18/2020, 14:30:18
          console.log(date.toLocaleString('zh-CN', options));  // 2020/7/18 14:30:18

          日期插件庫:

          Datejs 是一個開源的JavaScript庫,用來解析、格式化和處理日期數據,支持多種語言的日期格式處理;官網:www.datejs.com/

          Moment.js 是一個簡單易用的輕量級JavaScript日期處理類庫,提供了日期格式化、日期解析等功能。它支持在瀏覽器和NodeJS兩種環境中運行;

          date-fns庫:現代 JavaScript 日期實用程序庫。date-fns 提供了最全面,最簡單和一致的工具集,用于在瀏覽器和 Node.js 中操作 JavaScript 日期;官網:date-fns.org

          Prettydate 是一個 jQuery 用來顯示一些用戶友好的日期格式的插件,例如Posted 2 days ago by John Resig;

          Countdown是jQuery的一個用于顯示倒計時的插件;

          XDate是一個對Javascirpt本地Date對象的輕度包裝,它提供對日期的解析、格式化以及其他操作的較強功能;

          DP_DateExtensions庫繼承了JavaScript的Date對象,并添加了一些新特性和功能;

          組件類:

          layDate 日期與時間組件,layDate 是 layui 獨立維護的三大組件之一;官網:www.layui.com/laydate/。


          Web前端開發之Javascript-零點程序員-王唯


          主站蜘蛛池模板: 久久免费国产精品一区二区| 精品无码人妻一区二区三区不卡| 国产主播福利一区二区| 久久无码AV一区二区三区| 国产伦精品一区二区三区女| 国产高清在线精品一区| 精品国产一区二区三区麻豆 | 日韩少妇无码一区二区三区| 亚洲国产成人久久一区久久| 国产a∨精品一区二区三区不卡| 亚洲一区在线免费观看| 日本精品3d动漫一区二区| 日韩AV无码一区二区三区不卡毛片| 久草新视频一区二区三区| 亚洲av乱码中文一区二区三区 | 精品免费久久久久国产一区 | 无码人妻精品一区二区蜜桃网站| 日本一区中文字幕日本一二三区视频| 无码精品人妻一区二区三区AV| 亚洲夜夜欢A∨一区二区三区| 亚洲av乱码一区二区三区按摩| 国产福利电影一区二区三区,免费久久久久久久精| 国产一区二区三区夜色| 欧美成人aaa片一区国产精品| 中文字幕不卡一区| 色屁屁一区二区三区视频国产| 中文字幕亚洲乱码熟女一区二区| 亚洲一区二区三区国产精华液| 东京热无码av一区二区| 日本一区高清视频| 91久久精品国产免费一区 | 国产精品无圣光一区二区| 亚洲变态另类一区二区三区| 亚洲乱码国产一区三区| 立川理惠在线播放一区| 天堂va在线高清一区| 久久99精品国产一区二区三区| 国产一区二区三区视频在线观看| 波多野结衣久久一区二区| 国精产品一区一区三区| 日本一区二区三区在线视频观看免费|