.*匹配除 \n 以外的任何字符。
/[\u4E00-\u9FA5]/ 漢字
/[\uFF00-\uFFFF]/ 全角符號
/[\u0000-\u00FF]/ 半角符號
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})?$
備注:這就是最終結果了,別忘了+可以用*替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這里
別人過閏月生日,你也期待過嗎?我期待過。
假設還有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對象方法:
以上方法大概分為三種:to方法、get方法和set方法。
to方法-日期格式化方法:
date()類型還有一些專門用于將日期格式化為字符串的方法,如:
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.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";
日期時間插件被格式化輸出時可以使用的屬性集合描述。實現需要支持是以下子集中的其中一個:
實現可能支持其他的子集,并通過對所有可用的子集對比找到最匹配的子集。通過 formatMatcher屬性可以設置兩種算法用于對比和選擇子集: 完全匹配"basic"算法和一種依賴于“best fit”算法的實現;
每個日期時間組件屬性的默認值都是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-零點程序員-王唯
*請認真填寫需求信息,我們會在24小時內與您取得聯系。