简介
官方解释moment.js是JavaScript 日期处理类库,也就是用于日期格式转换的。官网地址:http://momentjs.cn/
下载
npm install moment --save # npm
yarn add moment # Yarn
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
bower install moment --save # bower (废弃)
基础用法
日期格式化
moment().format('MMMM Do YYYY, h:mm:ss a'); // 九月 29日 2022, 5:26:19 下午
moment().format('dddd'); // 星期四
moment().format("MMM Do YY"); // 9月 29日 22
moment().format('YYYY [escaped] YYYY'); // 2022 escaped 2022
moment().format(); // 2022-09-29T17:26:19+08:00
相对时间
moment("20111031", "YYYYMMDD").fromNow(); // 11 年前
moment("20120620", "YYYYMMDD").fromNow(); // 10 年前
moment().startOf('day').fromNow(); // 17 小时前
moment().endOf('day').fromNow(); // 7 小时内
moment().startOf('hour').fromNow(); // 26 分钟前
日历时间
moment().subtract(10, 'days').calendar(); // 2022/09/19
moment().subtract(6, 'days').calendar(); // 上星期五17:26
moment().subtract(3, 'days').calendar(); // 上星期一17:26
moment().subtract(1, 'days').calendar(); // 昨天17:26
moment().calendar(); // 今天17:26
moment().add(1, 'days').calendar(); // 明天17:26
moment().add(3, 'days').calendar(); // 下星期日17:26
moment().add(10, 'days').calendar(); // 2022/10/09
多语言支持
moment.locale(); // zh-cn
moment().format('LT'); // 17:26
moment().format('LTS'); // 17:26:19
moment().format('L'); // 2022/09/29
moment().format('l'); // 2022/9/29
moment().format('LL'); // 2022年9月29日
moment().format('ll'); // 2022年9月29日
moment().format('LLL'); // 2022年9月29日下午5点26分
moment().format('lll'); // 2022年9月29日 17:26
moment().format('LLLL'); // 2022年9月29日星期四下午5点26分
moment().format('llll'); // 2022年9月29日星期四 17:26
应用
指定日期比对
思路:先使用moment转换格式截取 YYYY-MM-DD hh:mm:ss等其中一部分变为字符串,然后再用moment转回成对象
然后diff方法只针对截取的部分转换成的时或分或秒进行比对
下面代码可以进一步优化
比如下需求:
天,范围是-2到2 格式:xx 12:00
天,范围是大于或小于2天,前提是年份一致 格式:04-23
// 比较时间差
// dateOrigin 如果是
export function formatDateText(dateOrigin) {
console.log(typeof dateOrigin === 'string')
if(!dateOrigin) return;
let today = moment(new Date()).format('YYYY-MM-DD')
let date = null
let dateOriginMoment = null;
if(typeof dateOrigin === 'string') {
date = moment(dateOrigin).format('YYYY-MM-DD')
dateOriginMoment = moment(dateOrigin);
} else {
console.log(dateOrigin)
date = dateOrigin.format('YYYY-MM-DD')
dateOriginMoment = dateOrigin;
}
today = moment(today)
date = moment(date)
console.log(today, date)
// let date = this.moment(dates.format('YYYY-MM-DD'), 'YYYY-MM-DD')
const diff_minute = date.diff(today, "minutes");
const diff_hour = date.diff(today, "hours");
const diff_day = date.diff(today, "days");
const diff_month = date.diff(today, "months");
const diff_year = date.diff(today, "years");
console.log(diff_minute, diff_hour,diff_day,diff_month, diff_year)
// 年比较
if(diff_year === 0) { //年份一样
if(diff_month === 0) { // 月份一样
let msg = ''
switch (diff_day) {
case 2:
msg = '后天'
break;
case 1:
msg = '明天'
break;
case 0:
msg = '今天'
break;
case -1:
msg = '昨天'
break;
case -2:
msg = '前天'
break;
default:
break;
}
if(msg) {
return msg+ ' ' + dateOriginMoment.format('HH:mm')
}
return dateOriginMoment.format('MM-DD HH:mm')
}
return dateOriginMoment.format('MM-DD HH:mm')
} else { // 如果年份不一样 2022-09-28 12:00
return dateOriginMoment.format('YYYY-MM-DD HH:mm')
}
}