简介
官方解释moment.js是JavaScript 日期处理类库,也就是用于日期格式转换的。官网地址:http://momentjs.cn/
下载
npm install moment --save # npmyarn add moment # YarnInstall-Package Moment.js # NuGetspm install moment --save # spmmeteor add momentjs:moment # meteorbower 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日 22moment().format('YYYY [escaped] YYYY'); // 2022 escaped 2022moment().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/19moment().subtract(6, 'days').calendar(); // 上星期五17:26moment().subtract(3, 'days').calendar(); // 上星期一17:26moment().subtract(1, 'days').calendar(); // 昨天17:26moment().calendar(); // 今天17:26moment().add(1, 'days').calendar(); // 明天17:26moment().add(3, 'days').calendar(); // 下星期日17:26moment().add(10, 'days').calendar(); // 2022/10/09多语言支持moment.locale(); // zh-cnmoment().format('LT'); // 17:26moment().format('LTS'); // 17:26:19moment().format('L'); // 2022/09/29moment().format('l'); // 2022/9/29moment().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:26moment().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 = nulllet 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:00return dateOriginMoment.format('YYYY-MM-DD HH:mm')}}
