美文网首页我爱编程
Moment.js显示中文

Moment.js显示中文

作者: it筱竹 | 来源:发表于2018-04-14 18:13 被阅读727次

    typora-root-url: ./momentImgs

    Moment.js显示中文

    一、参考文章:moment.js 添加中文语言(汉化)

    二、开始搞

    0、前提背景

    最近自己在搞微信小程序的一个项目,项目中需要用到时间戳,然后就想到用Moment.js这个日期处理类库,写了一段代码,测试了一下,打印出来的日期显示为英文,考虑到用户的需求,需要设置为中文。

    这里写图片描述

    1、找到Moment.js中文字典部分

    然后在网上查到就查到了该文章(参考文章:moment.js 添加中文语言(汉化)),看了看里面的大概步骤,

    moment.js提供了多种语言的支持,首先在github上找到中文字典部分:

    moment.defineLocale('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 : {  
                // 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.  
            }  
        });
    

    然后就开始弄了,打开moment.js(version : 2.10.6 )最后代码如下

     // moment.js
    // ... 以上代码略
    var Wd = Math.abs,
            Xd = yc("ms"),
            Yd = yc("s"),
            Zd = yc("m"),
            $d = yc("h"),
            _d = yc("d"),
            ae = yc("w"),
            be = yc("M"),
            ce = yc("y"),
            de = Ac("milliseconds"),
            ee = Ac("seconds"),
            fe = Ac("minutes"),
            ge = Ac("hours"),
            he = Ac("days"),
            ie = Ac("months"),
            je = Ac("years"),
            ke = Math.round,
            le = { s: 45, m: 45, h: 22, d: 26, M: 11 },
            me = Math.abs,
            ne = Ha.prototype;
        ne.abs = oc, ne.add = qc, ne.subtract = rc, ne.as = wc, ne.asMilliseconds = Xd, ne.asSeconds = Yd, ne.asMinutes = Zd, ne.asHours = $d, ne.asDays = _d, ne.asWeeks = ae, ne.asMonths = be, ne.asYears = ce, ne.valueOf = xc, ne._bubble = tc, ne.get = zc, ne.milliseconds = de, ne.seconds = ee, ne.minutes = fe, ne.hours = ge, ne.days = he, ne.weeks = Bc, ne.months = ie, ne.years = je, ne.humanize = Fc, ne.toISOString = Gc, ne.toString = Gc, ne.toJSON = Gc, ne.locale = rb, ne.localeData = sb, ne.toIsoString = aa("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", Gc), ne.lang = Cd, H("X", 0, 0, "unix"), H("x", 0, 0, "valueOf"), N("x", _c), N("X", bd), Q("X", function(a, b, c) { c._d = new Date(1e3 * parseFloat(a, 10)) }), Q("x", function(a, b, c) { c._d = new Date(q(a)) }), a.version = "2.10.6", b(Da), a.fn = Od, a.min = Fa, a.max = Ga, a.utc = h, a.unix = Zb, a.months = jc, a.isDate = d, a.locale = w, a.invalid = l, a.duration = Ya, a.isMoment = o, a.weekdays = lc, a.parseZone = $b, a.localeData = y, a.isDuration = Ia, a.monthsShort = kc, a.weekdaysMin = nc, a.defineLocale = x, a.weekdaysShort = mc, a.normalizeUnits = A, a.relativeTimeThreshold = Ec;
        var oe = a;
        return oe
    });
    

    看此代码更参考文章中的介绍的情况不一致(位置在最后一句 “return _moment;”),应该是moment.js更新所致。

    其实无所谓,只是要把return _moment; 改为return oe,同时把moment.defineLocale('zh-cn', {改为

    oe.defineLocale('zh-cn', {即可。

    然后把moment.js中文字典的代码复制到moment.js中位置在最后一句 “return oe;” 的前面,代码如下所示

    // ... 以上代码省略
    var oe = a;
        // 这里moment改为oe
        oe.defineLocale('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 : {  
                // 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.  
            }  
        });  
        return oe
    });
    

    使用代码简单测试一下,然后就可以实现中文显示了。

    这里写图片描述

    相关文章

      网友评论

        本文标题:Moment.js显示中文

        本文链接:https://www.haomeiwen.com/subject/mxnlkftx.html