菜单

JS原生Date类型方法的局部降温知

2018年11月15日 - JavaScript

JS原生Date类型方法的片段冷却知

2015/09/07 · JavaScript
· Date

初稿出处:
chitanda   

一个差不多月无更新了-
-偷懒中。这个事物其实挺早前即于整了,不过新兴发现自己不少地方尚未弄明白,然后就是直卡那边了(其实就是是无思写吧),想了下反正是让好熟悉js的原生API而已,所以呢未尝必要太钻牛角尖,也无自然要是多完整,因此即使当是Date()函数的一个冷门知识点小补充吧。这篇稿子主要讲Date()的字符串与时间戳转换以及用户时间本地化,可能内容达比较乱(不然也无见面卡我一个月份日了),见谅

ps:由于 Date() 是js原生函数,不同浏览器的解析器对那个实现方式并无跟,所以返回值也会有所区别。本文测试不特别说明浏览器的情景下,均是因
win7 x64+chrome 44.0.2403.155
(正式版本) m (32
位) 版本

Date类型


Date类型使用自UTC1970年1月1日零点上马通过的毫秒数来保存日期。
一旦开创一个日子对象,使用new操作符和Date构造函数即可:

var now = new Date();

图片 1

莫传递参数

图片 2

Date()与new Date()的区别

Date() 直接归时时光字符串,管参数是number还是其它string

JavaScript

Date(); Date(‘sssss’); Date(1000); //Fri Aug 21 2015 15:46:21 GMT+0800
(中国标准时间)

1
2
3
4
Date();
Date(‘sssss’);
Date(1000);
//Fri Aug 21 2015 15:46:21 GMT+0800 (中国标准时间)

如 new Date() 则是会见依据参数来回到对应的价,无参数的上,返回时时的字符串形式;有参数的时段回来参数所对应时间的字符串。
new Date() 针对参数不管是格式还是内容还务求,且只有回字符串,

JavaScript

new Date(); //Fri Aug 21 2015 15:51:55 GMT+0800 (中国正式日) new
Date(1293879600000); new Date(‘2011-01-01T11:00:00’) new
Date(‘2011/01/01 11:00:00’) new Date(2011,0,1,11,0,0) new Date(‘jan 01
2011,11 11:00:00’) new Date(‘Sat Jan 01 2011 11:00:00’) //Sat Jan 01
2011 11:00:00 GMT+0800 (中国正式日) new Date(‘sss’); new
Date(‘2011/01/01T11:00:00’); new Date(‘2011-01-01-11:00:00’) new
Date(‘1293879600000’); //Invalid Date new
Date(‘2011-01-01T11:00:00’)-new Date(‘1992/02/11 12:00:12’)
//596069988000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
new Date();
//Fri Aug 21 2015 15:51:55 GMT+0800 (中国标准时间)
 
new Date(1293879600000);
new Date(‘2011-01-01T11:00:00’)
new Date(‘2011/01/01 11:00:00’)
new Date(2011,0,1,11,0,0)
new Date(‘jan 01 2011,11 11:00:00’)
new Date(‘Sat Jan 01 2011 11:00:00’)
//Sat Jan 01 2011 11:00:00 GMT+0800 (中国标准时间)
 
new Date(‘sss’);
new Date(‘2011/01/01T11:00:00’);
new Date(‘2011-01-01-11:00:00’)
new Date(‘1293879600000’);
//Invalid Date
 
new Date(‘2011-01-01T11:00:00’)-new Date(‘1992/02/11 12:00:12’)
//596069988000

打点几乎个测试结果好挺轻觉察

  1. new Date() 在参数正常的景象只是见面回来时日之字符串(且是目前时区的工夫)
  2. new Date() 在分析一个具体的时光之时刻,对参数有比严苛的格式要求,格式不正确的当儿会一直回到Invalid Date,比如将
    number 类的日戳转换成 string 类的上吧会招解析出错
  3. 尽管如此 new Date() 的返回值是字符串,然而两只
    new Date() 的结果字符串是得直接相减的,结果也去的毫秒数。

那么, new Date() 能接受之参数格式到底是呀标准为?(相对于严格要求的基本上参数传值方法。非严格的唯有参数(数字日期表示格式)更不时因此都重新便于失误,所以下文只考虑单参数数字时间字符串转换的状态)

表示格式)更经常因此都再次易于错,所以下文只考虑单参数数字时间字符串转换的动静)


其三个方式

图片 3

比方传入Date.parse()方法的字符不克代表日期,那么它见面回去NaN。实际上,如果直接用象征日期的字符串传递让Date构造函数,也会以后台调用Date.parse()。

图片 4

结果同样

图片 5

日期和时空都基于本地时区。

![](https://upload-images.jianshu.io/upload_images/1281633-1362a3696236cb42.png)

new Date()解析所支撑之参数格式标准

接轨的措施

toLoaleString():会按同浏览器设置的处相互适应之格式返回日期的时空。
toString():返回待有时区信息之日期及日
valueOf():返回日期的毫秒表示。因此可以方便地用于操作符来比较日期值。

var date1 = new Date(2007,0,1);  //January 1,2007
var date2 = new Date(2007,1,1);   //"February 1,2007"

alert(date1 < date2);   //true
alert(date1 > date2);   //false

日戳格式

以此是无比简易的吗是无限无便于失误的。当然唯一的缺陷大概就是是指向开发者不直观,无法一眼看出具体日期。
需要留意的以下简单接触:

  1. js内的时间戳指的是现阶段时光到1970年1月1日00:00:00 UTC对应的毫秒数,和unix时间穿不是一个定义,后者表示秒数,差了1000加倍
  2. class=”crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-r”>new class=”crayon-r”>Date( class=”crayon-v”>timestamp class=”crayon-sy”>) 中的岁月穿必须是number格式,
    class=”crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-t”>string 会返回Invalid Date。所以按照new Date('11111111')这种写法是蹭的

日子格式化方法

图片 6

格式化日期方法

时光数字字符串格式

不大清楚这种该怎么描述,就是近乎YYYY/MM/DD HH:mm:SS这种。下文以dateString代指。
new Date(dateString)所支撑之字符串格式需要满足RFC2822标准或者ISO
8601标准
立即简单种植标准对应的格式分别如下:

  1. RFC2822 标准日期字符串
JavaScript

YYYY/MM/DD HH:MM:SS ± timezon(时区用4位数字表示) // eg 1992/02/12
12:23:22+0800

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6c187675a314957670-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6c187675a314957670-2">
2
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6c187675a314957670-1" class="crayon-line">
YYYY/MM/DD HH:MM:SS ± timezon(时区用4位数字表示)
</div>
<div id="crayon-5b8f6c187675a314957670-2" class="crayon-line crayon-striped-line">
// eg 1992/02/12 12:23:22+0800
</div>
</div></td>
</tr>
</tbody>
</table>

>  RFC2822还有别的格式,不过上面这个是比较常用的(另外这标准太难啃了,实在没耐心啃完,所以也就没太深入)。RFC2822标准本身还有其他的非数字日期表达方式,不过不在这个话题讨论范围内了,略过
  1. ISO 8601正规日期字符串
JavaScript

YYYY-MM-DDThh:mm:ss ± timezone(时区用HH:MM表示) 1997-07-16T08:20:30Z
//
“Z”表示UTC标准时区,即"00:00",所以这里表示零时区的\`1997年7月16日08时20分30秒\`
//转换成位于东八区的北京时间则为\`1997年7月17日16时20分30秒\`
1997-07-16T19:20:30+01:00 //
表示东一区的1997年7月16日19时20秒30分,转换成UTC标准时间的话是1997-07-16T18:20:30Z

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6c187675d765819674-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6c187675d765819674-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6c187675d765819674-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6c187675d765819674-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6c187675d765819674-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6c187675d765819674-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f6c187675d765819674-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6c187675d765819674-8">
8
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6c187675d765819674-1" class="crayon-line">
 YYYY-MM-DDThh:mm:ss ± timezone(时区用HH:MM表示)
</div>
<div id="crayon-5b8f6c187675d765819674-2" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6c187675d765819674-3" class="crayon-line">
 1997-07-16T08:20:30Z
</div>
<div id="crayon-5b8f6c187675d765819674-4" class="crayon-line crayon-striped-line">
 // “Z”表示UTC标准时区,即&quot;00:00&quot;,所以这里表示零时区的`1997年7月16日08时20分30秒`
</div>
<div id="crayon-5b8f6c187675d765819674-5" class="crayon-line">
 //转换成位于东八区的北京时间则为`1997年7月17日16时20分30秒`
</div>
<div id="crayon-5b8f6c187675d765819674-6" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6c187675d765819674-7" class="crayon-line">
 1997-07-16T19:20:30+01:00
</div>
<div id="crayon-5b8f6c187675d765819674-8" class="crayon-line crayon-striped-line">
 // 表示东一区的1997年7月16日19时20秒30分,转换成UTC标准时间的话是1997-07-16T18:20:30Z
</div>
</div></td>
</tr>
</tbody>
</table>
  1. 日期与日中的T匪可以让略去,一探访略就差。
  2. 尽管在chrome浏览器上时区也可据此+0100这种RFC2822的款式来代表,然而IE上未支持这种混搭写法,所以用ISO8601标准形式表示的时时区要为此+HH:MM

只从格式上吧,两者的区别主要在于分隔符的不同。不过用专注的是,ISO
8601正式的兼容性比RFC2822差得差不多(比如IE8和iOS均未支持前者。我知道IE8很多人会无视,不过iOS也有这个坑的话,各位或多或少会谨慎点了吧?),所以一般情况下建议就此RFC 2822格式的。
然而用注意的凡,在匪指定时区的前提下,对于只有精确到day的日子字符串,RFC 2822回去结果是因当前时区的零点为准,而ISO8601回去结果虽会因UTC时间的零点为规范进行剖析。
例如:

JavaScript

//RFC2822: new Date(‘1992/02/13’) //Thu Feb 13 1992 00:00:00 GMT+0800
(中国标准时间) //ISO8601: new Date(‘1992-02-13’) //Thu Feb 13 1992
08:00:00 GMT+0800 (中国标准时)

1
2
3
4
//RFC2822:
new Date(‘1992/02/13’) //Thu Feb 13 1992 00:00:00 GMT+0800 (中国标准时间)
//ISO8601:
new Date(‘1992-02-13’) //Thu Feb 13 1992 08:00:00 GMT+0800 (中国标准时间)

 

然上面这个只是是ES5的科班而已,在ES6里立马片栽形式还见面成当前时区的零点为基准1
*不管你们崩溃没,反正我是已经想死了*
有关跨浏览器的dataString解析情况,还可参考这页面:
JavaScript and Dates, What a
Mess!

所以对日字符串对象,个人见解是要用RFC2822形式,要么自己写个解析函数然后无论你传啥格式进来。


RegExp类型


时刻格式化函数的频率

这里的时间格式化值得是以时间字符串转换成毫秒数之过程。js原生的日格式化函数有Date.parseDate.prototype.valueOfDate.prototype.getTimeNumber(Date)+Date(还有个Date.UTC主意,然而对参数要求严,不克一直解析日期字符串,所以小过)
当时5个函数从效果上来说同样模子一样,但是实际的效率如何为?我形容了只检测页面,诸位也可协调测试下。
http://codepen.io/chitanda/pen/NqeZag/点击预览

创立一个正则表达式:

var expression = /cat/g;   //正则表达式字面量
var reg = new RegExp("cat",g);   //使用RegExp构造函数创建

正则表达式字面量始终会共享一个RegExp实例,而采取构造函数创建的每一个新RegExp实例都是一个新实例

flags:

基本测试函数:

JavaScript

function test(dateString,times,func){ var
startTime=window.performance.now(); //
console.log(‘start=’+startTime.getTime()); for (var i = 0; i < times;
i++) { func(dateString);//这里填写具体的解析函数 }; var
endTime=window.performance.now(); //
console.log(‘endTime=’+endTime.getTime()); var
gapTime=endTime-startTime; console.log(‘一共耗时:’+gapTime+’ms’); //
console.log(‘时间字符串’+dateString); return gapTime; }

1
2
3
4
5
6
7
8
9
10
11
12
13
    function test(dateString,times,func){
    var startTime=window.performance.now();
    // console.log(‘start=’+startTime.getTime());
    for (var i = 0; i < times; i++) {
        func(dateString);//这里填写具体的解析函数
    };
    var endTime=window.performance.now();
    // console.log(‘endTime=’+endTime.getTime());
    var gapTime=endTime-startTime;
      console.log(‘一共耗时:’+gapTime+’ms’);
    // console.log(‘时间字符串’+dateString);
    return gapTime;
}

 

所以此用window.performance.now()而不用new Date(),是为前端纯粹过多较继承者高。后者只能精确到ms。会对结果导致于生影响

RegExp实例属性

global:布尔值,表示是否设置了g标志。
ignoreCase:布尔值,表示是否设置了i标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
multiline:布尔值,表示是否设置了m标志。
source:正则表达式的字符串表示,按照字面量形式而非构造函数中的字符串模式返回

测试结果:

单次执行50W次时间格式化函数,并还测试100涂鸦,最后之结果如下:
(表格中之数字也单次执行50W次函数的平分结果。单位为毫秒)

函数 chrome IE Firefox
Date.parse() 151.2087 55.5811 315.0446
Date.prototype.getTime() 19.5452 21.3423 14.0169
Date.prototype.valueOf() 20.1696 21.7192 13.8096
+Date() 20.0044 31.3511 22.7861
Number(Date) 23.0900 24.8838 23.3775

由者表格可以很易得出以下结论:

  1. 起计算效率及来说,Date.prototype.getTime()Date.prototype.valueOf()>+DateNumber(Date)>>Date.parse()
  2. 自从代码书写效率达吧,对于少量之辰格式化计算,用+Date()或者Number(Date)即可。而如果页面内出大量该处理,则建议就此Date原生的函数Date.prototype.getTime()或者Date.prototype.valueOf().只有Date.parse,找不至外利用的理。
  3. 其一结果与计算机的计性能与浏览器有关,所以实际数字可能会见生出于生不是,很正常。然而几单函数结果的岁月不一大小顺序并无见面转换。
  4. codepen的在线demo限制于老,对于这试验个人建议最好好用源代码复制到本地文件然后开展测试

RegExp实例方法

var string='red';
var pattern=/\w/g;
var match=pattern.exec(string);
console.log(match);   //[ 'r', index: 0, input: 'red' ]
var match=pattern.exec(string);
console.log(match);   //[ 'e', index: 1, input: 'red' ]

UTC,GMT时间之界别

斯不是什么要东西,单纯当课外知识吧。

RegExp构造函数属性

input:最近一次要匹配的字符串。
lastMatch:最近一次的匹配项
lastParen:最近一次匹配的捕获组
leftContext:input字符串中lastMatch之前的文本
multiline:布尔值,表示是否所有表达式都使用多行模式
rightContext:input字符串中lastMatch之后的文本

采用实例:

var text = "this has been a short summer";
var pattern = /(.)hort/g;

if(pattern.test(text)){
  alert(RegExp.input);   //this has been a short summer
  alert(RegExp.leftContext);   //this has been a 
  alert(RegExp.rightContext);  //summer
  alert(RegExp.lastMatch);   //short
  alert(RegExp.lastParen);  //s
  alert(RegExp.multiline);  //false
 }

格林威治标准时间GMT

GMT即「格林威治标准日」(Greenwich Mean
Time,简称G.M.T.),指位于英国伦敦郊区的皇家格林威治天文台的正式时间,因为本初子午线被定义为经过那里的经线。然而由于地球之非正常自转,导致GMT时间发生误差,因此目前已经无深受当作标准日利用。

世界和谐时UTC

UTC是极要的社会风气时标准,是经平分太阳经常(以格林威治时间GMT为遵循)、地轴运动修正后的新时标以及因「秒」为单位之国际原子时所概括计算而成的年华。UTC比GMT来得愈加精准。其误差值必须保持在0.9秒内,若高于0.9秒则由在巴黎底国际地球自转事务中央局发布闰秒,使UTC与地球自转周期同。可是普通以被,GMT与UTC的效果和精确度是没差别之。
协调世界时区会动用“Z”来表示。而当飞行及,所有以的光阴划一规定凡是协调世界时。而且Z在收音机中应读作“Zulu”(可参见北约音标字母),协调世界时也会见让叫作“Zulu
time”。

浏览器获取用户眼前时间和爱语言

率先需小心一点,浏览器获取当前用户所在的时区等信息只有跟系统的日期和时间安装里之时区以及时光关于。区域和语言装影响之是浏览器默认时间函数(Date.prototype.toLocaleString等)显示的格式,不会见对时区等产生影响。以window为条例,控制面板\时钟、语言和区域吃之少个分支设置项目的别如下:

日期和时间:设置当前用户所处的日与时区,浏览器获取到之结果以此为准,哪怕用户的安时间及时区是一心错误的。比如若东八区的用户以协调的时区设置也东9区,浏览器就会见拿视为东9区;时间数额及同理。这里的安会潜移默化Date.prototype.getTimezoneOffsetnew Date()的值

区域和语言:主要是设置系统默认的光阴显示方式。其子设置的格式会影响Date.prototype.toLocaleString计返回的字符串结果

浏览器判断用户本地字符串格式

Date有只 Date.prototype.toLocaleString() 方法可将日字符串返回用户本地字符串格式,这个方法还有少数只支行方
Date.prototype.toLocaleDateString 和 Date.prototype.toLocaleTimeString ,这点儿独主意返回值分别代表日期时间,加同起就是是
Date.prototype.toLocaleString 的结果。
其一措施的默认参数会对日字符串做相同坏变,将那个易成用户眼前所当不时区的年华,并循相应之网设置时间格式返回字符串结果。然而不等浏览器对用户本地所动的语言格式的判断依据是差之。
IE:获取系统即之区域和语言格式遭遇装置的格式,依照其相应的格式来展示当前时刻结果;IE浏览器实时查询该系统安装(即你当浏览器窗口打开后错过改变系统设置为会见挑起返回格式变化)
FF:获取方式跟结果以及IE浏览器同样,区别在于FF只见面于浏览器进程第一次启动的时刻取得一软系统安装,中间不管怎么系统装置怎么变,FF都无法获得到当前网安装。除非再开FF浏览器。
Chrome:获取方式以及上述两个都不可同日而语。chrome无视系统的区域和语言格式格式,只仍自己浏览器的界面设置的菜系语言来拍卖。(比如英文界面则按系统’en-US’格式返回字符串,中文界面则依照系统’zh-CN’格式返回结果)
综上可得:

chrome下浏览器语言设置优先系统语言设置。而IE和FF则是系统语言设置优先浏览器语言设置,不管浏览器界面语言是啊,他们单独照系统装置来回到格式。(没有MAC,所以不知道safari是吗情况,等下看状态上吧)
除此以外,不同浏览器对toLocaleString回的结果吗是见仁见智的,IE浏览器严格恪守系统安装,而chrome和FF会有温馨放的格式来替换。

浏览器界面语言设置和语言设置的区别

立小节貌似有接触走题,然而莫说明下的良易与地方提到的浏览器设置的语言混淆视听,所以啊将出吧一下。
亟需注意浏览器的言语设置与界面语言设置不是一致扭曲事
浏览器的语言设置装的凡浏览器发送给服务器的Request Header里的Accept-Language的价值,这个价值好告诉服务器用户之喜好好语言,对于某些跨国网站,服务器可以以这个为还来回到对诺语言的页面(不过实在利用达到之限制于深,大部分网站还是因IP来判断用户来源之,或者直接给用户自己挑选)
对每大浏览器而言,这个装置的变更为是于显性,容易找到的。
IE: Internet选项语言
FF: 选项内容语言
chrome:设置显示高级设置语言语言和输入设置...
方这里的设置不会见潜移默化至浏览器的界面语言设置,以国内多数用户而言,即无论你怎么设置这里的语言选择,浏览器菜单等默认都见面是坐汉语显示的.
浏览器的界面语言设置诚如的话则藏的怪得差不多,没那爱找到。
IE:
卸载前面安装了之浏览器语言包,去微软官网下载对应的IE浏览器语言包安。(和装之言语包有关。系统界面语言和欠语言包相同之状况下,变为该语言。否则以安的语言包吗以。)
FF:地址栏输入about:config,然后找到general.useragent.locale字段,修改对许字段即可。
chrome:设置显示高级设置语言语言和输入设置...

用js获取用户浏览器语言喜好

对于取得这点儿种植设置,js原生方法支持过还较相似:
IE下之 navigator 方法来四种植和language关于的不二法门,区别如下:
如果系统语言也  ja-JP ,系统unicode语言为 zh-CN 日期格式为nl-NL,浏览器语言设置(accept-language)为
de ,浏览器界面语言为 en-US (其他标准不转换,浏览器界面语言改呢
zh-CN 的时刻结果为是一模一样),

JavaScript

window.navigator.language //”nl-NL” window.navigator.systemLanguage
//”zh-CN”(设置中的非unicode程序所采取语言选择)
window.navigator.userLanguage //”nl-NL” window.navigator.browserLanguage
//”ja-JP”(系统菜单界面语言) window.navigator.languages //undefined

1
2
3
4
5
6
7
8
9
10
window.navigator.language
//"nl-NL"
window.navigator.systemLanguage
//"zh-CN"(设置中的非unicode程序所使用语言选项)
window.navigator.userLanguage
//"nl-NL"
window.navigator.browserLanguage
//"ja-JP"(系统菜单界面语言)
window.navigator.languages
//undefined

chrome下,当浏览器界面语言为 zh-CN, accept-language首位为 en-US 的时候:

JavaScript

window.navigator.language //’zh-CN’ window.navigator.languages
//[“en-US”, “en”, “zh-CN”, “zh”, “ja”, “zh-TW”, “de-LI”, “de”, “pl”]
//当界面语言改也”en-US”时 window.navigator.language
//’en-US’(浏览器界面语言)

1
2
3
4
5
6
7
window.navigator.language
//’zh-CN’
window.navigator.languages
//["en-US", "en", "zh-CN", "zh", "ja", "zh-TW", "de-LI", "de", "pl"]
//当界面语言改为"en-US"时
window.navigator.language
//’en-US’(浏览器界面语言)

FF下,当浏览器界面语言也 zh-CN ,accept-language首位为 en-US 的时候:

JavaScript

window.navigator.language //’en-US’ window.navigator.languages
//[“en-US”, “zh-CN”, “de”, “zh”, “en”]
//当界面语言改吧”en-US”,`accept-language`首位为`zh-CN`的时候
window.navigator.language //’zh-CN’(`accept-language`首选值)
window.navigator.languages //[“zh-CN”, “de”, “zh”, “en-US”, “en”]

1
2
3
4
5
6
7
8
9
window.navigator.language
//’en-US’
window.navigator.languages
//["en-US", "zh-CN", "de", "zh", "en"]
//当界面语言改为"en-US",`accept-language`首位为`zh-CN`的时候
window.navigator.language
//’zh-CN’(`accept-language`首选值)
window.navigator.languages
//["zh-CN", "de", "zh", "en-US", "en"]
  1. 自地方的测试结果可以充分强烈的觉察IE浏览器的马上几乎单函数都是取得系统信息之,无法取得到前提到的点滴个浏览器层面上的装。(这几乎单函数具体意思还闹问号的得参照MSDN官方文档)
  2. class=”crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-v”>window class=”crayon-sy”>. class=”crayon-v”>navigator class=”crayon-sy”>. class=”crayon-v”>language 这个函数虽然三个浏览器都得以兼容,然而代表的意义了两样。IE下该函数返回系统装置的辰显示格式所遵循的规范的地面代码;chrome下返回浏览器界面语言;FF下回到accept-language的首选语言值

由此:

  1. 浏览器设置的语言accept-language值,IE浏览器无法运用JS获取。chrome和FF浏览器还好运用
     class="crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco"
    

    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-v”>window class=”crayon-sy”>. class=”crayon-v”>navigator class=”crayon-sy”>. class=”crayon-v”>languages 来取得,而FF还可以直接用 

     class="crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco"
    

    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-v”>window class=”crayon-sy”>. class=”crayon-v”>navigator class=”crayon-sy”>. class=”crayon-v”>language 直接获得accept-language的首选语言值。所以于accept-language,兼容性最好之获方式应该是应用后端,发起一个ajax请求,分析header。而无是一直js来处理。

  2. 浏览器界面语言,IE和FF都心有余而力不足以js来收获,chrome可以为此 id=”crayon-5b8f6c18767b3253782986″
    class=”crayon-syntax crayon-syntax-inline crayon-theme-github crayon-theme-github-inline crayon-font-monaco”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important;”> class=”crayon-pre crayon-code”
    style=”font-size: 13px !important; line-height: 15px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;”> class=”crayon-v”>window class=”crayon-sy”>. class=”crayon-v”>navigator class=”crayon-sy”>. class=”crayon-v”>language 来获取
  3. 网级别的语言设置(系统菜单界面语言,系统装置的时刻显示格式),chrome和FF都无法用JS获取到

总结

即时首文章绝对续续地描绘了一个多月份,不过出于针对 Date() 函数的支配不足因此个人感觉其实还是思路发生硌乱,所以文章看起或有些有接触跳跃性。不过用户本地化那片内容实在实用了累累思想去形容,希望对张就篇稿子的人头稍帮助。

参考文献

  1. Date and Time Formats
  2. Date and Time
    Specification(RFC2822)
  3. Date.parse()-Differences in assumed time
    zone
  4. JavaScript and Dates, What a
    Mess!
  5. navigator
    object(IE浏览器私有language函数的解析)

    1 赞 收藏
    评论

图片 7

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图