上一次我们一起重温了ES6新引入的两个数据结构:map和set。这一次我们要来重温一下大部分实际应用都会涉及的、用于处理日期和时间的Date。Date( )是用于创建Date对象的构造器函数,但是JS中Date对象并不是这门语言的最佳特性之一,这个内置对象的功能有限,所以我们也会介绍一下Moment.js。
1.Date对象基本介绍
Date()对象的构造函数可以传递以下几种参数:
(1)无参数
(2)一个用于表现日期的字符串
(3)分开传递的日、月、时间等值
(4)一个timestamp值(timestamp值是指UNIX时间,是UNIX或者类UNIX系统使用的时间表示方式,是从协调世界时(UTC Coordinated Universal Time)1970年1月1日0时0分0秒起至现在的总秒数)
1.1 无参数
下面我们通过代码看一下Date( )使用的例子:
let d1 = new Date() //当前时间
console.log(d1)
// Sun Oct 25 2020 07:47:36 GMT+0800 (中国标准时间)
控制台显示了Date对象的toString()的结果。
1.2 表示日期的字符串
接下来我们看一下一些用字符串初始化Date对象的例子:
let d2 = new Date('2020 10 25')
console.log(d2)
//Sun Oct 25 2020 00:00:00 GMT+0800 (中国标准时间)
let d3 = new Date('10 25 2020')
console.log(d3)
//Sun Oct 25 2020 00:00:00 GMT+0800 (中国标准时间)
1.3 传年月日等时间值
Date构造器也可以接受不同格式的字符串日期输入表示法,但是如果要定义一个精确的日期,只是将用户输入直接给Date构造器时不够可靠的,更好的选择是向Date()构造器传一些具体的数值,其中包括:
(1)年
(2)月(从0到11)
(3)日(从1到31)
(4)时(从0到23)
(5)分(从0到59)
(6)秒(从0到59)
(7)毫秒(从0到999)
下面看一下具体的例子:
let d4 = new Date(2015,0,1,17,5,3,120);
console.log(d4)
//Thu Jan 01 2015 17:05:03 GMT+0800 (中国标准时间)
上例展示了传递所有参数的情况。我们再来看一下只传递日期和时钟值的情况:
let d5 = new Date(2020,9,25,8);
console.log(d5)
//Sun Oct 25 2020 08:00:00 GMT+0800 (中国标准时间)
这里需要注意一下:月份时从0开始的,代表1月,上例中我们传的月份值是9,代表10月。
如果我们传递的值超过了被允许的范围,Date()对象会自行启动“溢出式”前进处理。例如:2016年2月不存在30日,所以会被解释成3月1日:
let d6 = new Date(2016,1,29)
console.log(d6)
// Mon Feb 29 2016 00:00:00 GMT+0800 (中国标准时间)
let d7 = new Date(2016,1,30)
console.log(d7)
// Tue Mar 01 2016 00:00:00 GMT+0800 (中国标准时间)
1.4 传timestamp值
最后我们看一个通过timestamp值创建Date对象的例子:
let d8 = new Date(1357027200000)
console.log(d8)
//Tue Jan 01 2013 16:00:00 GMT+0800 (中国标准时间)
2.Date对象的方法
2.1 getXXX 和 setXXX
一旦我们创建了Date对象,就可以调用该对象中的许多方法,其中大多数都是名为set()或者get()的方法,例如getMonth(),setMonth,getHours(),setHours()等等。我们来看一些具体的例子:
let d = new Date(2020,1,1)
console.log(d.toString())
//Sat Feb 01 2020 00:00:00 GMT+0800 (中国标准时间)
d.setMonth(2)
console.log(d.toString())
//Sun Mar 01 2020 00:00:00 GMT+0800 (中国标准时间)
console.log(d.getMonth())
//2
2.2 parse
Date.parse()方法可以将其所接受的字符串转换成相应的timestamp格式并返回,我们看一下例子:
let t = Date.parse('Jan 11,2018');
console.log(t)
//1515600000000
2.3 UTC
Date.UTC()方法可以接受包括年份、月份、日期等在内的所有参数,并以此产生一个相应的、符合格林尼治标准的timestamp值:
let t = Date.UTC(2018,0,11)
console.log(t)
// 1515628800000
2.4 now
Date.now()方法用于返回当前timestamp值,相比getTime()方法而言,这种新方法更加的简单:
let t = Date.now()
console.log(t)
//1603634815662
console.log( Date.now() === new Date().getTime())
//true
3.Moment.js 介绍
之前我们说过,JS中Date对象设计的并不是很方便我们的实际使用,所以在很多场景下我们一般使用日期处理类库。而Moment.js就是一个非常受欢迎的库,我们首先看一下对其的简单介绍:
Moment.js 是一个简单易用的轻量级 JavaScript 日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和 NodeJS 两种环境中运行。此类库能够将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。另外,它也支持多种语言,你可以任意新增一种新的语言包。
下面来看一下Moment.js使用的例子:
import moment from 'moment';
console.log(moment.locale());
// en
let d = moment("12-25-1995", "MM-DD-YYYY");
console.log(d.format("YYYY-MM-DD"))
//1995-12-25
let d1 = new Date(Date.UTC(2020,10,25))
let fd = moment(d1).format("YYYY-MM-DD HH:mm");
console.log(fd)
// 2020-11-25 08:00
更多关于Moment.js的内容,请参照官方文档,我们不再多说。
来一张导图总结我们今天回顾的全部内容:
我们这次的分享就到这里,下次再会。如有错误,请不吝指正。温故而知新,欢迎和我一起重温旧知识,攀登新台阶~