重温JavaScript(lesson21):日期和时间—Date

上一次我们一起重温了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的内容,请参照官方文档,我们不再多说。

来一张导图总结我们今天回顾的全部内容:

图片

我们这次的分享就到这里,下次再会。如有错误,请不吝指正。温故而知新,欢迎和我一起重温旧知识,攀登新台阶~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重温新知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值