javascript时间怎么处理(Date日期时间对象-Javascript-Web前端-零点程序员-王唯)
本内容是《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();
vard=newDate();//以当前日期和时间创建Date对象
vard=newDate(0);//以距离1970.1.1:00:00:00的毫秒数创建Date对象
vard=newDate(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
vard=Date.parse("May25,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('July22,2018')
Date.parse('July22,201807:22:13')
Date.parse('2018-07-2207:22:13')
Date.parse('2018-07-22T07:22:13')
注:如果传入Date.parse()方法的字符串不能表示日期,那么它会返回NaN;
根据parse()返回值创建Date对象;
vard=newDate(Date.parse("May25,2020"));
实际上,如果直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse(),两者是等价的,如:
vard=newDate("May25,2020");
注:日期对象在不同浏览器实现的并不统一,比如,传入了超出范围的值:
vard=newDate("January33,2020");
在解析January 33,2020,有些浏览器返回:Invalid Date;IE返回:Sun Feb 02 2020(把超出的时间往后自动推算);
可以在月份或者日期字段添加或省略前导零;
console.log(newDate('2020-6-6'));
console.log(newDate('2020-06-06'));
console.log(newDate('2020-06-0609:18:15'));
console.log(newDate('2020-06-06T09:18:15'));
console.log(newDate('2020-06'));
console.log(newDate('2020'));
console.log(newDate('06/07/2020'));
console.log(newDate('2020/06/07'));
console.log(newDate('2020/6/7'));
console.log(newDate('2020.6.7'));
console.log(newDate('2020.6.715:18:15'));
console.log(newDate('July18,2020'));
console.log(newDate('July18,202009:30:28'));
console.log(newDate('18July2020'));
console.log(newDate('18July,2020'));
console.log(newDate('18July202009:30:28'));
console.log(newDate('July2020'));
其实Date在内部是使用时间戳实现的;
vard=newDate(1591866649132)
console.log(d);
UNIX 时间戳的原因以秒(seconds)为单位。JavaScript 以毫秒(milliseconds)为单位记录时间。
可在使用UNIX 时间戳去实例化Date 对象;
vartimestamp=1591866649;
vard=newDate(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 个参数;
vard=Date.UTC(2020);
vard=Date.UTC(2020,6);//毫秒数1593561600000
vard = newDate(Date.UTC(2020,6));
vard=newDate(Date.UTC(2020,6,6,17,55,55));//自动添加时区,返回当地日期和时间
vard = newDate(2020,6,10);//月份从0开始,6即是7月
console.log(d);
如果没有任何关于时区的信息,会将日期视为 UTC ,并自动执行到当前计算机时区的转换;
可以直接把UTC参数传递给Date()构造函数,如:
vard=newDate(2020,6);//WedJul01202000:00:00GMT 0800
vard=newDate(2020,6,6,17,55,55);//即为GMT时间
console.log(d);
时区:
当初始化一个 Date 对象时可以选择时区,可以通过添加 HOURS 的格式,或者通过一个被圆括号包裹的时区名来描述一个时区:
console.log(newDate());
console.log(newDate('Jun7,202013:51:01 0700'));
console.log(newDate('Jun7,202013:51:01(CET)')); //CET欧洲中部时间
如果你使用时区名的方式但在圆括号中定义了一个错误的时区名,JavaScript 将会静默地将时区设置为默认的 UTC。
如果你使用 HOURS 的方式但传入的数字格式是错误的,JavaScript 将会抛出一个 “Invalid Date” 的 Error。
继承的方法:
与其他引用类型一样,Date类型也重写了toLocaleString()、toString()和valueOf()方法;但这些方法的返回值与其他类型中的方法不同。
valueOf()方法:返回日期的毫秒数;
toString()方法:通常返回带有时区信息的日期和时间;其中时间一般以军用时间(即小时从0到23);
toLocaleString():会按照与浏览器设置的地区相适应的格式返回日期和时间;即时间格式中会包含AM或PM,但不会包含时区信息;
vard=newDate(2020,6);//WedJul01202000:00:00GMT 0800
vard=newDate(2020,6,6,17,55,55);//即为GMT时间
console.log(d);
注:真实场景中,toString()和toLocaleString()没有什么用,仅在调试代码时使用;
至于valueOf()方法,返回的是毫秒数,因此,可以方便的使用比较操作来比较日期,如:
console.log(newDate());
console.log(newDate('Jun7,202013:51:01 0700'));
console.log(newDate('Jun7,202013: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方法:
用于获取当前日期时间信息;
vard=newDate();
console.log(d.getDate());//18
console.log(d.getDay());//4
console.log(d.getFullYear());//2020
console.log(d.getMonth());//5(startsfrom0)
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提前或落后的分钟数; 还可以用于判断该时区是否使用夏令时:
vard1=newDate(2020,0,1);
vard2=newDate(2020,6,1);
console.log(d1.getTimezoneOffset());//-480/60=-8小时
varb=d1.getTimezoneOffset()!=d2.getTimezoneOffset();//判断夏令时
console.log(b);
这些方法有等效的UTC版本,它们返回UTC值而不是适合您当前时区的值
vard=newDate();
console.log(d.getUTCDate());//18
console.log(d.getUTCDay());//4
console.log(d.getUTCFullYear());//2020
console.log(d.getUTCMonth());//5(startsfrom0)
console.log(d.getUTCHours());//9
console.log(d.getUTCMinutes());//30
console.log(d.getUTCSeconds())//13
console.log(d.getUTCMilliseconds());//765
setter方法:
vard=newDate();
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),这也会将日期数变大;
vardate=newDate();
date.setFullYear(2022,1,18);
//date.setMonth(24);
date.setMonth(2,8);
date.setHours(16,18,28,208);
console.log(date.toLocaleString());
如果参数是负数,表示从上个月的最后一天开始减去相应的单位数:
以上的方法都有一个相对应的 UTC set方法:
vard=newDate();
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(newDate().getTime());
console.log(Date.now());
Date.now()方法返回表示调用这个方法时的日期和时间的毫秒数;其简化了Date.getTime()方法,如:
varstart=Date.now();
for(vari=0;i<100000;i ){}//模拟其他处理代码
varstop=Date.now();
varresult=stop-start;
alert(result);
如果有些浏览器不支持Date.now(),可以使用 操作符获取Date对象的时间戳,如:
varstart= newDate();
for(vari=0;i<100000;i ){}//模拟其他处理代码
varstop= newDate();
varresult=stop-start;
alert(result);
日期的计算:
直接加减或通过 Date.getTime() 的值来比较两个 Date 对象:
vard1=newDate("2020-06-18");
vard2=newDate("2020-06-19");
console.log(d1-d2);//-86400000
console.log(d1 d2);//返回两个日期的字符串拼接
//或
vard1=newDate('July18,202014:10:18');
vard2=newDate('July19,202014:10:18');
vardiff=d2.getTime()-d1.getTime();
console.log(diff);
注:getTime() 方法返回以毫秒计的数字,所以需要将当日时刻计入;如:July 18, 2020 14:14:14 不等于July 18, 2020。在这种情况下,可以使用 setHours(0, 0, 0, 0) 来重置当日时刻;
计算本年度还剩下多少天:
functionleftDays(){
vartoday=newDate();
varendYear=newDate(today.getFullYear(),11,31,23,59,59,999);
varmsPerDay=24*60*60*1000;
returnMath.round((endYear.getTime()-today.getTime())/msPerDay);
}
console.log(leftDays());
小练习:
//中文月份和星期
vard=newDate();
varmonth=d.getMonth();
varweek=d.getDay();
varmonthArr=['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
varweekArr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
console.log(monthArr[month]);
console.log(weekArr[week]);
//获取日期部分信息
Date.prototype.datePart=function(part){
if(!part)
part='d';
varweekArr=['日','一','二','三','四','五','六'];
switch(part){
case'Y':
case'y':
returnthis.getFullYear();
break;
case'M':
returnthis.getMonth 1;
break;
case'W':
case'w':
returnweekArr[this.getDay()];
break;
case'D':
case'd':
returnthis.getDate();
break;
case'H':
case'h':
returnthis.getHours();
break;
case'm':
returnthis.getMinutes();
break;
case's':
returnthis.getSeconds();
break;
default:
returnthis.getDate();
}
returnthis.getDate();
}
console.log(newDate().datePart('d'));
还有多长时间退休:
//一个人到退休还有多长时间
functionretireDays(birthday,age){
vard1=newDate(birthday).getFullYear();
vard2=newDate().getFullYear();
varold=d2-d1;
console.log("现在你的年龄是:" old,",将于" (d1 age) "退休");
if(age-old>0){
console.log("还差" (age-old) "年退休")
}else{
console.log("你已经退休啦,好好享受老年生活吧");
}
}
retireDays('2020.6.6',60);
倒计时:
<!--网页时钟-->
<pid="mydate"></p>
<script>
functioncheckTime(i){
if(i<10)
i='0' i;
returni;
}
functionstartTime(){
vard=newDate();
varh=d.getHours();
varm=checkTime(d.getMinutes());
vars=checkTime(d.getSeconds());
document.getElementById('mydate').innerHTML=h ':' m ':' s;
timer=setTimeout('startTime()',1000);
}
startTime();
//倒计时
functiongetCountDown(d){
vard1=newDate();
vard2=newDate(d);//
vardiff=d2-d1;//相差毫秒数
varo={};
if(diff>=0){
varday=Math.floor(diff/1000/60/60/24);//剩下多少天
varhour=Math.floor(diff/1000/60/60%24);//剩下多少小时
varminute=Math.floor(diff/1000/60%60);//剩下多少分
varsecond=Math.floor(diff/1000%60);//剩下多少秒
o.stop=false;
o.str="距离" d ",还剩下" day "天" hour "小时" minute "分" second "秒";
}else{
o.stop=true;
o.str="已时结束";
}
returno;
}
vartimer=setInterval(function(){
varmydate=document.getElementById('mydate');
mydate.innerHTML=getCountDown('2020.6.8').str;
if(getCountDown('2020.6.8').stop)clearInterval(timer);
},1000);
计算某个日期加上天数:
//计算加几天后的日期,days可以使用负数
//如果计算月份,是一样的原理
functionaddDate(date,days){
vard=newDate(date);
d.setDate(d.getDay() days);
varmonth=d.getMonth() 1;
varday=d.getDate();
if(month<10)
month="0" month;
if(day<10)
day="0" day;
varvalue=d.getFullYear() "-" month "-" day;
returnvalue;
}
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)));
}
vard=newDate();
console.log(d.isLeapYear());
d.setFullYear(2019);
console.log(d.isLeapYear());
//计算两个日期的天数差
functiondaysDiff(dateOne,dateTwo){
varoneMonth=dateOne.substring(5,dateOne.lastIndexOf('-'));
varoneDay=dateOne.substring(dateOne.length,dateOne.lastIndexOf('-') 1);
varoneYear=dateOne.substring(0,dateOne.indexOf('-'));
vartwoMonth=dateTwo.substring(5,dateTwo.lastIndexOf('-'));
vartwoDay=dateTwo.substring(dateTwo.length,dateTwo.lastIndexOf('-') 1);
vartwoYear=dateTwo.substring(0,dateTwo.indexOf('-'));
vardiff=((Date.parse(oneMonth '/' oneDay '/' oneYear)-Date.parse(twoMonth '/' twoDay '/' twoYear))/86400000);
returndiff;
}
console.log(daysDiff('2020-6-6','2020-5-30'));
格式化输出:
Date.prototype.format=function(fmt){
varo={
"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(varkino){
if(newRegExp("(" k ")").test(fmt)){
fmt=fmt.replace(RegExp.$1,
RegExp.$1.length===1
?o[k]
:("00" o[k]).substr(("" o[k]).length));
}
}
returnfmt;
};
vard=newDate(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)等对象。
vardate=newDate();
console.log(date);
console.log(Intl.DateTimeFormat().format(date));//2020/7/22
console.log(newIntl.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".
vardate=newDate();
//韩国使用year-month-day格式
console.log(newIntl.DateTimeFormat('ko-KR').format(date));
//2020.6.18
//大部分阿拉伯国家使用阿拉伯字母(realArabicdigits)
console.log(newIntl.DateTimeFormat('ar-EG').format(date));
//"٢٠/١٢/٢٠١٢"
//在日本,应用可能想要使用日本日历,
//2020是平成32年(平成是是日本天皇明仁的年号,由1989年1月8日起开始计算直至现在)
console.log(newIntl.DateTimeFormat('ja-JP-u-ca-japanese').format(date));
//类似"平成32/6/20"
//当请求一个语言可能不支持,如巴厘(ban),若有备用的语言印尼语(id),
//那么将使用印尼语(id)
console.log(newIntl.DateTimeFormat(['ban','id']).format(date));
//"20/6/2020"
console.log(newIntl.DateTimeFormat('zh-CN').format(date));//2020/6/11
console.log(newIntl.DateTimeFormat('zh-u-nu-hanidec').format(date));//二〇二〇/六/一一
console.log(newIntl.DateTimeFormat('zh-u-ca-chinese').format(date));//37/闰4/20
console.log(newIntl.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";
vardate=newDate();
varoptions={year:'numeric',month:'numeric',day:'numeric',hour:'numeric',minute:'numeric',second:'numeric'};
console.log(newIntl.DateTimeFormat('en-US').format(date));//6/7/2020
console.log(newIntl.DateTimeFormat('en-US',options).format(date));//6/7/2020,3:07:31PM
console.log(newIntl.DateTimeFormat('it-IT').format(date));//7/6/2020
console.log(newIntl.DateTimeFormat('it-IT',options).format(date));//7/6/2020,15:08:34
vardate=newDate(Date.UTC(2020,6,18,6,30,18));
//请求参数(options)中包含参数星期(weekday),并且该参数的值为长类型(long)
varoptions={weekday:'long',year:'numeric',month:'long',day:'numeric'};
console.log(newIntl.DateTimeFormat('zh-CN',options).format(date));
console.log(newIntl.DateTimeFormat('de-DE',options).format(date));
//Samstag,18.Juli2020
//一个应用使用世界标准时间(UTC),并且UTC使用短名字(short)展示
options.timeZone='UTC';
//若不写这一行那么仍然显示的是世界标准时间;但是UTC三个字母不会显示
options.timeZoneName='short';
console.log(newIntl.DateTimeFormat('en-US',options).format(date));
//Saturday,July18,2020,UTC
//更精确的定义
options={
hour:'numeric',minute:'numeric',second:'numeric',
timeZoneName:'short'
};
console.log(newIntl.DateTimeFormat('en-US',options).format(date));
//12:30:18PMGMT 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/1814: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-零点程序员-王唯
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com