js时间Date对象

2022-01-05  本文已影响0人  香蕉不拿呢
一.时间标准: GMT(格林尼治标准时间)和 UTC (协调世界时间)

格林尼治位于伦敦郊区,其正好位于本初子午线(0度经线)上。格林尼治标准时间(Greenwich Mean Time,GMT),指的就是正午太阳横穿格林尼治子午线时的时间。1960年以前 GMT 曾作为基本时间计量系统被广泛应用,当时主要为了1840 年之后的铁路系统服务。
但是后来,人们发现地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间就不是很准确了,每隔一阵就会有误差,所以就不再被作为标准时间使用了。
于是后来就出现了 协调世界时间(Universal Time Coordinated,UTC),它是由原子钟提供的。 自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息,UTC是基于标准的GMT提供的准确时间。
原子时与以往的计时系统不同,它非常精确并且不以某地的平均太阳时为基准,但是遇有地球自转速度不均匀,原子时与世界时之间的时差便日积月累,因此,UTC 会在一段时期后加上正或负的闰秒来补偿。位于巴黎的国际地球自转事务中央局(IERS) 负责决定何时加入闰秒。
现在为了方便,我们一般将GMT与UTC视为等同,它们都是标准时间。

new Date() // Wed Jan 05 2022 11:11:03 GMT+0800 (中国标准时间) ---- GMT+0800 指北京时间
JSON.stringify(new Date()) // "2022-01-05T06:20:52.223Z" ---- UTC
二.unix时间戳

unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
在编程语言中,使用这种方式来表示时间更轻量。
假如在1970-01-01之前的时间,会带有负的时间戳。

三.Date对象
1.Date()
new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

参数支持string字符串,number类型,和多参数。
Date()构造函数有四种基本形式

year
表示年份的整数值。 0到99会被映射至1900年至1999年,其它值代表实际年份。参见 示例。
monthIndex
表示月份的整数值,从 0(1月)到 11(12月)。
date可选
表示一个月中的第几天的整数值,从1开始。默认值为1。
hours 可选
表示一天中的小时数的整数值 (24小时制)。默认值为0(午夜)。
minutes 可选
表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为0。
seconds 可选
表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为0。
milliseconds 可选
表示一个完整时间的毫秒部分的整数值。默认值为0。
2.new Date()获取格式化时间
let date = new Date()
date.getFullYear() 2022 // 获取年
date.getMonth() 0 // 获取月 注意:获取的月份值比真实值小1,下标是从0开始的。
date.getDate() 5 // 获取日
date.getHours() 15 // 获取时
date.getMinutes() 27 // 获取分
date.getSeconds() 23 // 获取秒
date.getMilliseconds() 198 // 获取毫秒
date.toString() 'Wed Jan 05 2022 15:44:17 GMT+0800 (中国标准时间)' // 获取该时间对象字符串
date.toDateString() "Wed Jan 05 2022"  // 获取日期部分
date.toTimeString() "15:47:30 GMT+0800 (中国标准时间)"   // 获取时间部分

Date.toLocaleString([locales [, options]]) 不同的语言返回不同的字符串

/**
* @params locales 可选。语言
* @params options 可选。可以设置一些属性的对象
**/ 
date.toLocaleString() '2022/1/5 下午3:27:23' // 获取日期对象的字符串
date.toLocaleDateString() '2022/1/5' // 获取日期部分的字符串
date.toLocaleTimeString() '下午3:27:23' // 获取日期对象时间部分的字符串

date.toLocaleString('ar-SA') "٢/٦/١٤٤٣ هـ ٤:٠٢:٢٧ م"
date.toLocaleString('zh-CN') "2022/1/5 下午4:02:27"

locales 的合法值为

ar-SA 阿拉伯语(沙特阿拉伯) bn-BD Bangla(孟加拉国) bn-IN 孟加拉语(印度) cs-CZ 捷克语(捷克共和国) da-DK 丹麦语(丹麦) de-AT 奥地利 德语 de-CH“瑞士”德语 de-DE 标准德语(在德国使用) el-GR 现代希腊语 en-AU 澳大利亚英语 en-CA 加拿大英语 en-GB 英式英语 en-IE 爱尔兰语 英语 en-IN 印度 英语 en-NZ 新西兰 英语 en-US 美国英语 en-ZA 英语(南非) es-AR 阿根廷 西班牙语 es-CL 智利 西班牙语 es-CO 哥伦比亚西班牙语 es-ES 卡斯蒂利亚西班牙语(在西班牙中北部使用) es-MX 墨西哥 西班牙语 es-US 美式 西班牙语 fi-FI 芬兰语(芬兰) fr-BE 比利时 法语 fr-CA 加拿大法语 fr-CH “瑞士” 法语 fr-FR 标准法语(尤其是在法国) he-IL 希伯来语(以色列) hi-IN 印地语(印度) hu-HU 匈牙利语(匈牙利) id-ID 印度尼西亚语(印度尼西亚) it-CH“瑞士”意大利语 it-IT 标准意大利语(意大利语) jp-JP 日语(日本) ko-KR 韩文(大韩民国) nl-BE 比利时荷兰语 nl-NL 标准荷兰语(荷兰语) no-NO 挪威语(挪威) pl-PL 波兰语(波兰) pt-BR 巴西葡萄牙语 pt-PT 欧洲葡萄牙语(在葡萄牙书写和使用) ro-RO 罗马尼亚语(罗马尼亚) ru-RU 俄语(俄罗斯联邦) sk-SK 斯洛伐克语(斯洛伐克) sv-SE 瑞典语(瑞典) ta-IN 印度语 泰米尔语 ta-LK 斯里兰卡泰米尔语 th-TH Thai (泰国) tr-TR 土耳其语(土耳其) zh-CN 中国大陆,简体字 zh-HK 香港,繁体字 zh-TW 台湾,繁体字
3.获取时间戳
let date = new Date()
date.valueOf() 1641369747293
date.getTime() 1641369747293
4.字符串转时间格式

支持的类型:"yy,MM,dd","yy/MM/dd","yy-MM-ddThh:mm:dd"
不支持的类型:"yy-MM-dd"格式低版本ie浏览器不支持

new Date("2021,1,5") Tue Jan 05 2021 00:00:00 GMT+0800 (中国标准时间)
new Date("2021/1/5") Tue Jan 05 2021 00:00:00 GMT+0800 (中国标准时间)
new Date("2021-01-05T16:12:13") Tue Jan 05 2021 16:12:13 GMT+0800 (中国标准时间)
5.时间戳转时间格式

时间戳支持负数,表示1970-01-01以前的时间

var date = new Date()
var time = date.getTime() // 1641372259359
new Date(time) // Wed Jan 05 2022 16:44:19 GMT+0800 (中国标准时间)
new Date(-10000000000)  // Sun Sep 07 1969 14:13:20 GMT+0800 (中国标准时间)
上一篇下一篇

猜你喜欢

热点阅读