前言
在日常开发中,我们常常会遇到以下几种场景:
- 需要对日期进行非标准格式展示,如 :2021年5月11日星期二下午6点42分
- 需要对日期进行处理,如:要取前24小时的时间 等
在这时候用js原生的new Date()
处理就有些麻烦了,因此我们找到了moment
这个类库
一、moment是什么?
moment
是一个 JavaScript
日期处理类库。
注:以下所有时间相对于现在时间:2021/05/11/18:42 星期二
1.日期格式化:
- moment().format('MMMM Do YYYY, h:mm:ss a'); // 五月 11日 2021, 6:42:31 下午
- moment().format('dddd'); // 星期二
- moment().format("MMM Do YY"); // 5月 11日 21
- moment().format('YYYY [escaped] YYYY'); // 2021 escaped 2021
- moment().format(); //2021-05-11T18:06:42+08:00
2.相对时间:
- moment("20111031", "YYYYMMDD").fromNow(); // 2011/10/31号相对于现在是: 10 年前
- moment("20120620", "YYYYMMDD").fromNow(); // 2012/06/20号相对于现在是: 9 年前
- moment().startOf('day').fromNow(); //当前日期开始即:2021/05/11/00:00:00相对于现在是: 19 小时前
- moment().endOf('day').fromNow(); //当前日期结束即:2021/05/11/24:00:00相对于现在是: 5 小时内
- moment().startOf('hour').fromNow(); //当前日期小时开始即:2021/05/11/18:00:00相对于现在是: 42分钟前
4.多语言支持:
- moment.locale(); // zh-cn
- moment().format('LT'); // 18:42
- moment().format('LTS'); // 18:42:31
- moment().format('L'); // 2021/05/11
- moment().format('l'); // 2021/5/11
- moment().format('LL'); // 2021年5月11日
- moment().format('ll'); // 2021年5月11日
- moment().format('LLL'); // 2021年5月11日下午6点42分
- moment().format('lll'); // 2021年5月11日 18:42
- moment().format('LLLL'); // 2021年5月11日星期二下午6点42分
- moment().format('llll'); // 2021年5月11日星期二 18:42
二、使用步骤(例:默认查询时间24小时之前~当前时间)
1.引入库
$ npm install moment --save
2.在main.js中全局引入(也可单独在使用的文件中引入,具体看需求)
import moment from "moment"
Vue.prototype.$moment = moment;
3.在需要使用日期的地方使用
HTML中:
<el-date-picker
v-model="timeRange"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
JS中:
data() {
return {
timeRange:[],
}
},
mounted(){
let start = this.$moment()
.subtract('1', 'd')
.format('YYYY-MM-DD HH:mm:ss') //当前时间往前推1天(24小时):2021-05-10 18:42:53
let end = this.$moment().format('YYYY-MM-DD HH:mm:ss') //当前时间:2021-05-11 18:42:53
this.timeRange=[start,end]
},
三、日期格式
格式 | 含义 | 举例 | 备注 |
yyyy | 年 | 2021 | 同YYYY |
M | 月 | 1 | 不补0 |
MM | 月 | 01 | |
d | 日 | 2 | 不补0 |
dd | 日 | 02 | |
dddd | 星期 | 星期二 | |
H | 小时 | 3 | 24小时制;不补0 |
HH | 小时 | 18 | 24小时制 |
h | 小时 | 3 | 12小时制,须和 A 或 a 使用;不补0 |
hh | 小时 | 03 | 12小时制,须和 A 或 a 使用 |
m | 分钟 | 4 | 不补0 |
mm | 分钟 | 04 | |
s | 秒 | 5 | 不补0 |
ss | 秒 | 05 | |
A | AM/PM | AM | 仅 format 可用,大写 |
a | am/pm | am | 仅 format 可用,小写 |
具体方法以及参数可详见moment官方文档
四、new Date() 相关
let time = new Date(); //获取当前时间 Tue May 11 2021 18:42:51 GMT+0800 (中国标准时间)
let year = time.getFullYear(); //获取年 2021
let month = time.getMonth() + 1; //获取月 5
let day = time.getDate(); //获取天 11
let h = time.getHours(); //获取小时 18
let m = time.getMinutes(); //获取分钟 42
let s = time.getSeconds(); //获取秒 51
let weekDay = time.getDay(); //获取星期 2
五、时间插件moment.js如何设置中文语言环境
// moment是一个专门处理时间日期的模块
// 设置语言环境
moment.locale('zh-cn', {
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'YYYY-MM-DD',
LL: 'YYYY年MM月DD日',
LLL: 'YYYY年MM月DD日Ah点mm分',
LLLL: 'YYYY年MM月DD日ddddAh点mm分',
l: 'YYYY-M-D',
ll: 'YYYY年M月D日',
lll: 'YYYY年M月D日 HH:mm',
llll: 'YYYY年M月D日dddd HH:mm'
},
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour: function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
if (meridiem === '凌晨' || meridiem === '早上' ||
meridiem === '上午') {
return hour;
} else if (meridiem === '下午' || meridiem === '晚上') {
return hour + 12;
} else {
// '中午'
return hour >= 11 ? hour : hour + 12;
}
},
meridiem: function (hour, minute, isLower) {
const hm = hour * 100 + minute;
if (hm < 600) {
return '凌晨';
} else if (hm < 900) {
return '早上';
} else if (hm < 1130) {
return '上午';
} else if (hm < 1230) {
return '中午';
} else if (hm < 1800) {
return '下午';
} else {
return '晚上';
}
},
calendar: {
sameDay: '[今天]LT',
nextDay: '[明天]LT',
nextWeek: '[下]ddddLT',
lastDay: '[昨天]LT',
lastWeek: '[上]ddddLT',
sameElse: 'L'
},
dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
ordinal: function (number, period) {
switch (period) {
case 'd':
case 'D':
case 'DDD':
return number + '日';
case 'M':
return number + '月';
case 'w':
case 'W':
return number + '周';
default:
return number;
}
},
relativeTime: {
future: '%s内',
past: '%s前',
s: '几秒',
ss: '%d秒',
m: '1分钟',
mm: '%d分钟',
h: '1小时',
hh: '%d小时',
d: '1天',
dd: '%d天',
M: '1个月',
MM: '%d个月',
y: '1年',
yy: '%d年'
},
week: {
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
dow: 1, // Monday is the first day of the week.
doy: 4 // The week that contains Jan 4th is the first week of the year.
}
})
//演示代码呈现:
//console.log(moment().format("YYYY-MM-DD HH:mm:ss")) //2021-06-24 15:48:33
//console.log(moment().format('dddd') ); //星期四
//console.log(moment('20120624','YYYYMMDD').fromNow() //9年前