moment.js的使用

发表于:2017-09-21

Node.js和客户端都能使用,把一些常用的记录一下,方便查找。根据我的了解日期格式化和相对时间 用的比较多。

客户端直接采用cdn或者下载

<script src="https://cdn.bootcss.com/moment.js/2.18.1/moment.min.js"></script>

其他安装,默认安装最新版本

bower install moment --save # bower
npm install moment --save   # npm
Install-Package Moment.js   # NuGet
spm install moment --save   # spm
meteor add momentjs:moment  # meteor

日期格式化

// 格式化当前时间
moment().format();   // 2017-09-21T10:36:02+08:00

// 传入一个指定时间戳毫秒
moment(1505961407752).format();   // 2017-09-21T10:36:47+08:00

// 传入一个指定时间戳秒, 实际上是 * 1000
moment.unix(1505961407752).format();

// 2017-09-21 10:40:42, 分割线自己定义
moment().format('YYYY-MM-DD hh:mm:ss');

// 2017-9-21 10-48-2, 只有一个字母的代表前面没有0,比如1,2,3
moment().format('YYYY-M-DD h:m:s');

// 9月21日 10:51
moment().format('M月D日 h:m');

// 9月21日 上午10:56      a代表的是(上午、下午、早上、晚上,am, pm)等,看当前时间。
// a => am,pm, 大写A => AM, PM,主要还是语言如果是汉语的话就是上午下午...,英语就是am, pm
moment().format('M月D日 ah:m');

/*
  PS注意点: 
    1. moment参数不只是单单可以传入时间戳,还可以 moment(new Date())、moment(Date.now())等。
    2. 如果后端传过来的时间戳是秒的要记得 * 1000,或者使用moment.unix();
    3. 时间戳是字符串要记得parseInt 否则无法解析。
*/

相对时间

// 下面是官方的例子
moment("20111031", "YYYYMMDD").fromNow(); // 6 年前
moment("20120620", "YYYYMMDD").fromNow(); // 5 年前
moment().startOf('day').fromNow();        // 13 小时前
moment().endOf('day').fromNow();          // 11 小时内
moment().startOf('hour').fromNow();       // 43 分钟前

// 可以传入一个时间戳, 20 小时前
moment(1505896173000).fromNow();

// 返回的是带空格时间,如果不想要空格那么需要正则去一下
moment(1505896173000).fromNow().replace(/\s/, '');    // 20小时前

自定义文字配置

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 : 'Ah点mm分',  
                LTS : 'Ah点m分s秒',  
                L : 'YYYY-MM-DD',  
                LL : 'YYYY年MMMD日',  
                LLL : 'YYYY年MMMD日Ah点mm分',  
                LLLL : 'YYYY年MMMD日ddddAh点mm分',  
                l : 'YYYY-MM-DD',  
                ll : 'YYYY年MMMD日',  
                lll : 'YYYY年MMMD日Ah点mm分',  
                llll : 'YYYY年MMMD日ddddAh点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) {  
                var 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 : function () {  
                    return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';  
                },  
                nextDay : function () {  
                    return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';  
                },  
                lastDay : function () {  
                    return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';  
                },  
                nextWeek : function () {  
                    var startOfWeek, prefix;  
                    startOfWeek = moment().startOf('week');  
                    prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';  
                    return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';  
                },  
                lastWeek : function () {  
                    var startOfWeek, prefix;  
                    startOfWeek = moment().startOf('week');  
                    prefix = this.unix() < startOfWeek.unix()  ? '[上]' : '[本]';  
                    return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';  
                },  
                sameElse : 'LL'  
            },  
            ordinalParse: /\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 : '几秒',  
                m : '1 分钟',  
                mm : '%d 分钟',  
                h : '1 小时',  
                hh : '%d 小时',  
                d : '1 天',  
                dd : '%d 天',  
                M : '1 个月',  
                MM : '%d 个月',  
                y : '1 年',  
                yy : '%d 年'  
            },  
            week : {  
                dow : 1,
                doy : 4
            }
        });
JavaScript
广告