菜单

JS原生Date类型方法的组成部分气冷知

2018年11月16日 - JavaScript

时光格式化函数的频率

这里的时间格式化值得是拿日字符串转换成为毫秒数之长河。js原生的年月格式化函数有Date.parseDate.prototype.valueOfDate.prototype.getTimeNumber(Date)+Date(还有个Date.UTC术,然而对参数要求严格,不能够直接解析日期字符串,所以小过)
立刻5独函数从效果及来说无异于型一样,但是实际的频率如何为?我形容了只检测页面,诸位也足以协调测试下。
http://codepen.io/chitanda/pen/NqeZag/点击预览

日子格式化方法

图片 1

格式化日期方法

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

RegExp实例属性

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

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() 能接受的参数格式到底是啊正儿八经呢?(相对于严格要求的差不多参数传值方法。非严格的单纯参数(数字日期表示格式)更经常因此都重新易错,所以下文只考虑单参数数字时间字符串转换的动静)

意味着格式)更不时因此都再度易失误,所以下文只考虑单参数数字时间字符串转换的情况)


老三单办法

图片 2

如传入Date.parse()方法的字符不能够代表日期,那么她会回来NaN。实际上,如果直白拿代表日期的字符串传递给Date构造函数,也会见在后台调用Date.parse()。

图片 3

结果一致

图片 4

日期及日都冲本地时区。

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

总结

当下篇稿子绝对续续地勾勒了一个差不多月,不过出于对 Date() 函数的牵线不足因此个人感觉其实还是思路来接触乱,所以文章看起也许有些有接触跳跃性。不过用户本地化那片内容实在实用了很多心思去形容,希望对张就首文章的口有些帮助。

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
 }

日数字字符串格式

不大清楚这种该怎么描述,就是相仿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实例方法

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' ]

用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获取到

接轨的不二法门

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')这种写法是蹭的

始建一个正则表达式:

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

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

flags:

UTC,GMT时间的区分

是不是何要东西,单纯当课外知识吧。

RegExp类型


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

随即多少节貌似有接触走题,然而切莫说明下的特别易与方提到的浏览器设置的语言混淆视听,所以也将出以来一下。
需要注意浏览器的言语设置与界面语言设置不是平等转头事
浏览器的语言设置装的凡浏览器发送给服务器的Request Header里的Accept-Language的价,这个价值好告诉服务器用户之欣赏好语言,对于某些跨国网站,服务器可以以之也还来回到对承诺语言的页面(不过实在运用上者范围于特别,大部分网站还是因IP来判断用户来源之,或者直接吃用户自己挑选)
对各大浏览器而言,这个装置的转移为是于显性,容易找到的。
IE: Internet选项语言
FF: 选项内容语言
chrome:设置显示高级设置语言语言和输入设置...
面这里的装不会见潜移默化及浏览器的界面语言设置,以国内大部分用户而言,即无而怎么设置这里的言语选择,浏览器菜单等默认都见面是盖汉语显示的.
浏览器的界面语言设置貌似的话虽然藏的不胜得差不多,没那好找到。
IE:
卸载前面安装了之浏览器语言包,去微软官网下载对应的IE浏览器语言包安装。(和安之言语包有关。系统界面语言及拖欠语言包相同之景象下,变为该语言。否则以安的言语包也以。)
FF:地址栏输入about:config,然后找到general.useragent.locale字段,修改对承诺字段即可。
chrome:设置显示高级设置语言语言和输入设置...

Date类型


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

var now = new Date();

图片 5

未传递参数

图片 6

JS原生Date类型方法的组成部分镇知

2015/09/07 · JavaScript
· Date

初稿出处:
chitanda   

一个多月无更新了-
-偷懒中。这个东西其实很早前就是在打点了,不过新兴发现自己不少地方没有来明白,然后就是一直卡那边了(其实就是是勿思量写吧),想了下反正是被协调深谙js的原生API而已,所以啊没有必要太钻牛角尖,也未肯定要是多完整,因此就当是Date()函数的一个冷知识点小补充吧。这首文章要讲Date()的字符串与日戳转换以及用户时间本地化,可能内容及于乱(不然也未见面卡我一个月时间了),见谅

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

世界和谐时UTC

UTC是最好要害的世界时标准,是透过平分太阳经常(以格林威治时间GMT为按)、地轴运动修正后底初时标以及因「秒」为单位的国际原子时所综合计算而成的工夫。UTC比GMT来得尤为精准。其误差值必须保障在0.9秒内,若高于0.9秒则由于在巴黎之国际地球自转事务中央局发布闰秒,使UTC与球自转周期同。而普通行使被,GMT与UTC的功用与精确度是从未有过差异之。
协调世界时区会采取“Z”来表示。而当飞行直达,所有以的时刻划一规定凡是协调世界时。而且Z在无线电中应读作“Zulu”(可参见北约音标字母),协调世界时也会为号称“Zulu
time”。

测试结果:

单次执行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限制于特别,对于这个考试个人建议极好将源代码复制到地方文件然后进行测试

格林威治标准日GMT

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

主干测试函数:

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。会针对结果造成较生影响

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

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会有和好置于的格式来替换。

参考文献

  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

浏览器获取用户眼前日跟爱语言

首先用注意一点,浏览器获取当前用户所在的时区等消息才和体系的日期和时间装里的时区以及日关于。区域和语言安影响的凡浏览器默认时间函数(Date.prototype.toLocaleString等)显示的格式,不见面指向时区等有震慑。以window为条例,控制面板\时钟、语言和区域屡遭之星星点点个支行设置项目的区分如下:

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

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

相关文章

标签:

发表评论

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

网站地图xml地图