moment.js 时间库
JS中常见的 标准时间:https://www.cnblogs.com/perallina/p/10451955.html
- GMT-格林尼治标准时
- UTC- 协调世界时
- 中国标准时间
new Date().toString() // 根据 本地时间转换 // 'Mon Nov 14 2022 23:10:18 GMT+0800 (中国标准时间)'
- 时间戳(UNIX时间戳):时间戳就是基于世界时算出来的毫秒数。
new Date().valueOf() // valueOf() 方法 是, 返回 Date 对象的原始值。 // 1668439218860
说明:
- 现在为了方便,我们一般将GMT与UTC视为等同,它们都是标准时间。
- 除了GMT、UTC 两个标准时间,其它的都是基于这两个时间,根据时区进行换算的。
- 表示时间的常见有上面4种类型【完整表示时间,不是从时间中摘取部分】。其它的年月日那种类型的,只是从时间上摘取信息出来重新组合了下。
JS中获取不同标准时间的方法:
- toISOString():使用 ISO 标准返回字符串的日期格式。
new Date().toISOString() // '2022-11-15T01:41:51.429Z'
- toUTCString():根据世界时,把 Date 对象转换为字符串。【MGT、UTC都是世界时,而且我们把他们视为等同】
new Date().toUTCString() // 'Tue, 15 Nov 2022 01:44:02 GMT'
- toString():把 Date 对象转换为字符串。
new Date().toString() // 'Tue Nov 15 2022 09:46:13 GMT+0800 (中国标准时间)'
- valueOf() :返回 Date 对象的原始值,即时间戳。
new Date().valueOf() // 1668477146023
- toTimeString():根据本地时间格式,把 Date 对象转换为字符串。
new Date().toLocaleString() // '2022/11/15 09:53:18'
注意:toTimeString 并没有完整表示出时间,因为他没有时区的信息。只是在本地的时区上 使用才有效。
一、Moment.js概念: https://www.cnblogs.com/Jimc/p/10591580.html 或 http://momentjs.cn/(官网)
1、Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。
二、Moment 功能分类:
- 解析:就是根据参数,获取到一个 moment 时间对象。【即解析的结果是 获取 到一个 moment时间对象】
- moment() :【一般 解析,只要使用这一个 方法就可以了】
- moment.unix(Number)
- moment.utc()
- 取值/赋值:
- second():获取或设置秒钟。
moment().second(Number); // 设置 moment 时间对象的 的 秒钟 moment().second(); // 获取 时间对象的 秒钟
- minute():获取或设置分钟。
moment().minute(Number); moment().minute(); // 数字
- hour()
- date()
- year()
- get():对上面方法的通用接口,以参数的方式 区分。
moment().get('year'); moment().get('month'); // 0 至 11 moment().get('date'); moment().get('hour'); moment().get('minute'); moment().get('second'); moment().get('millisecond');
- set()
moment().set('year', 2013); moment().set('month', 3); // 四月 moment().set('date', 1); moment().set('hour', 13); moment().set('minute', 20); moment().set('second', 30); moment().set('millisecond', 123); moment().set({'year': 2013, 'month': 3});
- second():获取或设置秒钟。
等等。。。
三、API: 日常开发中,通常会对时间进行下面这几个操作:比如获取时间,设置时间,格式化时间,比较时间等等。
2、设置 moment 时区: 好像默认就是 中国的时区。所以一般不用单独去设置。
import 'moment/locale/zh-cn'
moment.locale('zh-cn');
3、创建 moment 时间对象: moment 对象 类似 Date 对象。一个moment 对象就是一个 时间对象。但是不同于原生的 Date对象,是经过封装的时间对象。
a、时间对象都是有完整时间戳的,原生Date时间对象 的 时间戳一般是固定,不会去改变的,但是 moment 时间对象的 时间戳,通过调用API是会变化的(即改变了时间)。
moment() // 里面可以传入参数,创建指定时间的 时间对象。注意一个 moment 时间对象,只能执行一次moment()。就像 原生的 Date 一样,只能new一次。不然 每执行一次就是一个新的 时间对象。
b、moment 时间对象,指向的时间对象是可变的。这点和 Date时间对象是不一样的。所以不要 把 一个 moment 对象,赋值给一个变量,在对这个变量进行时间设置。
let test = moment() // 创建moment时间对象。 console.log(test.format('YYYY-MM-DD hh:mm:ss a')) // 2019-11-26 09:34:19 pm test.add(1,'days') console.log(test.format('YYYY-MM-DD hh:mm:ss a')) // 2019-11-27 09:34:19 pm
所以 moment 时间对象的使用,一般都直接调用 moment()产生的时间对象,后接对应的方法。如:下面都是相对于 date1 的时间,但是不能直接在date1上操作,不然date1是时间就会被改变。
let date1 = moment() // 现在的时间对象 let date2 = moment().subtract(1, 'days') // 一天前的时间对象 let date2 = moment().add(1, 'days') // 一天后的时间对象
4、获取时间对象的信息: moment 时间对象 提供 了这个时间对象下各种时间的获取。如:获取一个时间对象的 时、分、秒 等等。
moment 提供获取时间对象信息的接口蛮多的,具体的可以参考 公网 或者 https://www.cnblogs.com/Jimc/p/10591580.html
5、设置时间(也是创建时间的一种):就是基于一个 时间对象,变成 另外一个时间对象,即 相对时间 。 如, 一个天前的时间对象(相对当前时间)、一个天后的时间对象等。
let date2 = moment().subtract(1, 'days') // 一天前 的 时间对象,而不是 moment() 时间对象了 let date2 = moment().add(1, 'days') // 一天后 的 时间对象
6、格式化时间:将时间对象,以某种字符串 格式 表示。也是 一种 时间对象 信息的获取。
moment().format('YYYY-MM-DD') // 2019-11-28
7、比较时间: 获取两个日期之间的时间差
let start_date = moment().subtract(1, 'weeks') let end_date = moment() end_date.diff(start_date) // 返回毫秒数 end_date.diff(start_date, 'months') // 0 end_date.diff(start_date, 'weeks') // 1 end_date.diff(start_date, 'days') // 7 start_date.diff(end_date, 'days') // -7
8、moment对象 转化为JavaScript原生 Date对象:
moment().toDate() new Date(moment())
其他的还有一些 功能,但是不常用,这里就不介绍了,感兴趣的话,可以去官网查看。