来自 软件资讯 2019-12-23 06:10 的文章
当前位置: 威尼斯国际官方网站 > 软件资讯 > 正文

关于Date的冷门知识记录

ISO

ISO( 全称国际标准ISO 8601卡塔尔(英语:State of Qatar),是国标化协会的日期和时间的象征方法,全称为《数据存储和置换形式·音讯调换·日期和时间的意味方法》。(注意ISO 8601是时刻格式,不仅三个格式,而是包罗众多格式,想打听越多请跳转ISO( 全称国际标准ISO 8601卡塔尔(قطر‎官网)

new Date()

Date还足以当做布局函数使用。对它使用new指令,会再次来到三个Date指标的实例。借使不加参数,生成的正是表示当前些天子的靶子。

var today = new Date();

这个Date实例对应的字符串值,正是近些日子时间。

var today = new Date();

today
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

// 等同于
today.toString()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

用作结构函数时,Date目的能够采用种种格式的参数。

(1)new Date(milliseconds)

Date对象选拔从一九六两年11月1日00:00:00 UTC起先计算的皮秒数作为参数。这意味倘若将Unix时间戳(单位为秒)作为参数,必需将Unix时间戳乘以1000。

new Date(1378218728000)
// Tue Sep 03 2013 22:32:08 GMT+0800 (CST)

// 1970年1月2日的零时
var Jan02_1970 = new Date(3600 * 24 * 1000);
// Fri Jan 02 1970 08:00:00 GMT+0800 (CST)

// 1969年12月31日的零时
var Dec31_1969 = new Date(-3600 * 24 * 1000);
// Wed Dec 31 1969 08:00:00 GMT+0800 (CST)

地点最终三个事例表明,Date布局函数的参数能够是多少个负数,表示一九六七年7月1日事情发生前的大运。

(2)new Date(datestring)

Date对象还选择贰个日子字符串作为参数,再次回到所对应的时刻。

new Date('January 6, 2013');
// Sun Jan 06 2013 00:00:00 GMT+0800 (CST)

日子字符串的大器晚成体化格式是“month day, year hours:minutes:seconds”,比方“December 25, 一九九五13:30:00”。假诺轻巧了小时、分钟或秒数,那几个值会被设为0。

唯独,别的格式的日子字符串,也可以被深入深入分析。事实上,全数能够被Date.parse()方法深入分析的日子字符串,都得以充作Date指标的参数。

new Date('2013-2-15')
new Date('2013/2/15')
new Date('02/15/2013')
new Date('2013-FEB-15')
new Date('FEB, 15, 2013')
new Date('FEB 15, 2013')
new Date('Feberuary, 15, 2013')
new Date('Feberuary 15, 2013')
new Date('15 Feb 2013')
new Date('15, Feberuary, 2013')

// Fri Feb 15 2013 00:00:00 GMT+0800 (CST)

地点多样日子字符串的写法,重临的都以同叁个日子。

在意,在ES5里面,假诺日期接纳连词线(-)格式分隔,且持有前导0,JavaScript会以为那是三个ISO格式的日期字符串,引致重回的流年是以UTC时区总结的。

new Date('2014-01-01')
// Wed Jan 01 2014 08:00:00 GMT+0800 (CST)

new Date('2014-1-1')
// Wed Jan 01 2014 00:00:00 GMT+0800 (CST)

地点代码中,日期字符串有未有前导0,再次回到的结果是不平等的。若无前导0,JavaScript引擎假若顾客处于地点时区,所以本例再次回到0点0分。若是有前导0(即只要您以ISO格式表示日期),就假若客商处于Green尼治国际标依期的时区,所以回来8点0分。可是,ES6更改了这种做法,规定凡是未有一点点名时区的日期字符串,大器晚成律确定客户处于地方时区。

总之,对于YYYY-MM-DD款式的字符串,JavaScript引擎恐怕会将其看作ISO格式来解析,选用Green尼治时区作为计时典型;而对此任何格式的日期字符串,风度翩翩律视为非ISO格式,采纳地面时区作为计时标准。

new Date('2014-12-11')
// Thu Dec 11 2014 08:00:00 GMT+0800 (CST)

new Date('2014/12/11')
// Thu Dec 11 2014 00:00:00 GMT+0800 (CST)

地点代码中,第一个日子字符串是ISO格式,第三个不是,招致变化的时光分裂等。

(3)new Date(year, month [, day, hours, minutes, seconds, ms])

Date对象还足以承当四个整数作为参数,依次表示年、月、日、小时、分钟、秒和飞秒。若是接纳这种格式,起码供给提供多少个参数(年和月),别的参数都以可选的,暗中同意等于0。因为只要只利用“年”那一个参数,Date对象会将其表明为微秒数。

new Date(2013)
// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)

地点代码中,二〇一二被阐述为纳秒数,实际不是年度。

梯次参数的取值范围如下。

  • year:二位年份,假诺写成两位数,则增进一九〇四
  • month:表示月份,0代表11月,11代表10月
  • date:表示日期,1到31
  • hour:表示小时,0到23
  • minute:表示分钟,0到59
  • second:表示分钟,0到59
  • ms:表示飞秒,0到999

只顾,月份从0开始总结,不过,天数从1起来思忖。此外,除了日期默以为1,时辰、分钟、分钟和皮秒暗中同意都是0。

new Date(2013, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

new Date(2013, 0, 1)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

new Date(2013, 0, 1, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

new Date(2013, 0, 1, 0, 0, 0, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

下面代码重回的是二〇一二年5月1日零点的岁月。

这一个参数若是超过了常标准围,会被机关折算。比如,要是月设为15,就折算为下季度的五月。

new Date(2013, 15)
// Tue Apr 01 2014 00:00:00 GMT+0800 (CST)

new Date(2013, 0, 0)
// Mon Dec 31 2012 00:00:00 GMT+0800 (CST)

参数还是能动用负数,表示扣去的小运。

new Date(2013, -1)
// Sat Dec 01 2012 00:00:00 GMT+0800 (CST)

new Date(2013, 0, -1)
// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)

地点代码分别对月和日应用了负数,表示从基准日扣去相应的时间。

年度若是是0到99,会自行抬高1903。比方,0表示1903年,1象征1902年;假诺为负数,则象征公元前。

new Date(0, 0)
// Mon Jan 01 1900 00:00:00 GMT+0800 (CST)

new Date(1, 0)
// Tue Jan 01 1901 00:00:00 GMT+0800 (CST)

new Date(-1, 0)
// Fri Jan 01 -1 00:00:00 GMT+0800 (CST)

二.四个出奇的日子 ---- 1966年7月1日

不知凡几编制程序语言都是 1970-01-01 00:00:00 作为计时起源,这一九六六年0101是怎么日子吧,为何会选择这一天作为计时起源呢?笔者上网查找了生机勃勃番,开掘原因有两点。

Date.parse()

Date.parse办法用来解析日期字符串,重返间距1968年九月1日 00:00:00的皮秒数。

正规的日期字符串的格式,应该完全或许有个别相符TiguanFC 2822和ISO 8061,即YYYY-MM-DDTHH:mm:ss.sssZ格式,此中最终的Z表示时区。不过,其余格式也得以被解析,请看下边包车型客车例证。

Date.parse('Aug 9, 1995')
// 返回807897600000,以下省略返回值

Date.parse('January 26, 2011 13:51:50')
Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
Date.parse('2011-10-10')
Date.parse('2011-10-10T14:48:00')

假如分条析理退步,再次回到NaN

Date.parse('xxx') // NaN

一.GMT是什么,UTC是什么,ISO是社么???

to类方法

(1)Date.prototype.toString()

toString办法再次来到三个完全的日子字符串。

var d = new Date(2013, 0, 1);

d.toString()
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"

d
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"

因为toString是默许的调用方法,所以假如直白读取Date对象实例,就一定于调用那一个艺术。

(2)Date.prototype.toUTCString()

toUTCString措施再次回到对应的UTC时间,也正是比巴黎时间晚8个小时。

var d = new Date(2013, 0, 1);

d.toUTCString()
// "Mon, 31 Dec 2012 16:00:00 GMT"

d.toString()
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"

(3)Date.prototype.toISOString()

toISOString方法重临对适当时候间的ISO8601写法。

var d = new Date(2013, 0, 1);

d.toString()
// "Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"

d.toISOString()
// "2012-12-31T16:00:00.000Z"

注意,toISOString措施重返的接连UTC时区的小时。

(4)Date.prototype.toJSON()

toJSON方法再次回到八个契合JSON格式的ISO格式的日子字符串,与toISOString措施的归来结果完全相符。

var d = new Date(2013, 0, 1);

d.toJSON()
// "2012-12-31T16:00:00.000Z"

d.toISOString()
// "2012-12-31T16:00:00.000Z"

(5)Date.prototype.toDateString()

toDateString方式重临日期字符串。

var d = new Date(2013, 0, 1);
d.toDateString() // "Tue Jan 01 2013"

(6)Date.prototype.toTimeString()

toTimeString办法重临时间字符串。

var d = new Date(2013, 0, 1);
d.toTimeString() // "00:00:00 GMT+0800 (CST)"

(7)Date.prototype.toLocaleDateString()

toLocaleDateString艺术再次回到八个字符串,代表日期的地面写法。

var d = new Date(2013, 0, 1);

d.toLocaleDateString()
// 中文版浏览器为"2013年1月1日"
// 英文版浏览器为"1/1/2013"

(8)Date.prototype.toLocaleTimeString()

toLocaleTimeString办法重回三个字符串,代表时间的本地写法。

var d = new Date(2013, 0, 1);

d.toLocaleTimeString()
// 中文版浏览器为"上午12:00:00"
// 英文版浏览器为"12:00:00 AM"

做个测量试验

条件:当前Computer安装时间为香江时间2018-06-29 02:39:41 am

var date = new Date( ); // ->  Fri Jun 29 2018 02:39:41 GMT+0800 (中国标准时间)
date.toDateString( ); // -> "Fri Jun 29 2018”
date.toGMTString(); // ->"Thu, 28 Jun 2018 18:39:41 GMT”    (差8个小时)
date.toISOString(); // ->"2018-06-28T18:39:41.578Z”    (差8个小时)
date.toJSON(); // -> "2018-06-28T18:39:41.578Z"    (差8个小时)
date.toLocaleDateString() //->"2018/6/29”
date.toLocaleString() //->"2018/6/29 上午2:39:41”    (12小时制)
date.toLocaleTimeString() //->"上午2:39:41”    (12小时制)
date.toUTCString() //->"Thu, 28 Jun 2018 18:39:41 GMT”    (差8个小时)

概述

Date对象是JavaScript提供的日子和岁月的操作接口。它能够代表的时光范围是,1968年10月1日00:00:00内外的各1亿天(单位为阿秒)。

Date指标足以充作一般函数直接调用,重临多个意味当前日子的字符串。

Date()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

瞩目,固然包括参数,Date用作常常函数使用时,重回的要么当下光阴。

Date(2000, 1, 1)
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

地方代码表达,无论有未有参数,直接调用Date连接回到当不久前子。

#本子二:最先Computer操作系统是三十个人,而时间也是用三13位表示,Integer.MAX_VALUE68 年就能回归二回。

    最初计算机操作系统是32位,而时间也是用32位表示。 System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此32位能表示的最大值是2147483647。

    另外1年365天的总秒数是31536000, 2147483647/31536000 = 68.1 也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07 秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为 10000000 00000000 00000000 00000000 也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。而最早出现的UNIX操作系统考虑到计算 机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始 时间)。至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作 系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

Date.UTC()

默许情形下,Date对象回来的都以当前时区的时刻。Date.UTC艺术能够回来UTC时间(世界标依期期)。该措施选拔年、月、日等变量作为参数,再次回到当前相差一九六六年四月1日 00:00:00 UTC的阿秒数。

// 格式
Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])

// 用法
Date.UTC(2011, 0, 1, 2, 3, 4, 567)
// 1293847384567

该方式的参数用法与Date布局函数完全风流倜傥致,举个例一之日从0开首推测,日期从1早先预计。

UTC|GMT

我们理解,世界内地点与国家经度区别,地点时也大有径庭。正式的时区划分,此中包蕴二十二个时区,内地都有本身的本土时间。在国际有线电通讯地方,为了统一同见,使用一个联合的光阴,称为通用协和时(UTC, Universal Time Coordinated卡塔尔(英语:State of Qatar)。UTC与Green尼治平均时(欧霉素T, Greenwich Mean 提姆e卡塔尔国同样,都与United KingdomLondon的地面时豆蔻梢头致。香江时区是东八区,超越UTC几个钟头。(new Date( 卡塔尔 再次来到的是阿奇霉素T+0800(中华夏族民共和国家规范按期期))

从测试看出,*date.toGMTString()*,*date.toISOString()*,*date.toJSON()*,*date.toUTCString()*返回的都是GMT标准时间。

Date.now()

Date.now主意重回当前偏离1966年八月1日 00:00:00 UTC的阿秒数(Unix时间戳乘以1000)。

Date.now() // 1364026285194

纵然急需比微秒更确切的时间,能够运用window.performance.now()。它提供页面加载到命令运维时的已经玉陨香消的光阴,能够准确到少有飞秒。

window.performance.now() // 21311140.415

眼前在做项指标时候,用到了Date.toLocaleString来管理当下日子。在这后边,小编都以通过get*等办法来获取数据进行拼接。无意间,开掘了toLocaleString方法。遂想写风度翩翩篇随笔来记录Date中有的时候用到的章程,以便现在翻看。

Date.prototype.valueOf()

valueOf情势重临实例对象间距壹玖陆捌年1三月1日00:00:00 UTC对应的皮秒数,该格局生机勃勃致getTime方法。

var d = new Date();

d.valueOf() // 1362790014817
d.getTime() // 1362790014817

该措施能够用于总结标依时期。

var start = new Date();

doSomething();
var end = new Date();
var elapsed = end.getTime() - start.getTime();

本文由威尼斯国际官方网站发布于软件资讯,转载请注明出处:关于Date的冷门知识记录

关键词: