angular ordinalDate过滤器问题
angular ordinalDate过滤器问题
孟飞阳 发表于8个月前
angular ordinalDate过滤器问题
  • 发表于 8个月前
  • 阅读 45
  • 收藏 0
  • 点赞 0
  • 评论 0

先看一下代码:

'use strict';
angular.module('app.filters', []).filter('ordinalDate', ['$filter', function($filter) {
        /**
         * 将给定的天数输出以下格式:d'th',d'st',d'nd',d'rd',
         * 因为按习惯是这样:1st 2nd 3rd 4-20th 21st 22nd 23rd 24-30th 31st
         * @param number
         * @returns {string}
         */      
        var getOrdinalSuffix = function(number) {
            var suffixes = ["'th'", "'st'", "'nd'", "'rd'"];
            var relevantDigits = (number < 30) ? number % 20 : number % 30;
            return "d" + ((relevantDigits <= 3) ? suffixes[relevantDigits] : suffixes[0]);
        };
        /**
         * /d+((?!\w*(?=')))|d$/g;  这段正则分解以下:
         *(1)/d+ 表示全局从d字符开始匹配。表示的不是数字,而是字符"d",+表示连接符号,如"a"+"b"=“ab”这样
         *(2)?!表示反向匹配,如d可以可以匹配上,而如果是其他字符就匹配不上,
         *(3)?='表示只匹配'开头的,如d'aa',ds就不匹配了./d+(?!\w*(?='))表示只匹配:d其他字符,不匹配:d'其他字符'
         *(4)/g表示全局匹配
         *(5)/d+((?!\w*(?=')))|d$/g;如果匹配上则会输出:d或dd,否则null,匹配类似:[d其他字符] 这样的字符,不匹配:[d'其他字符'] 这种类型
         */
        return function(timestamp, format) {
            var regex = /d+((?!\w*(?=')))|d$/g;//提取d或dd
            var date = new Date(timestamp);
            var dayOfMonth = date.getDate();
            var suffix = getOrdinalSuffix(dayOfMonth);
            if(format != undefined){
                format = format.replace(regex, function (match) {
                    return match === "d" ? suffix : match; //如果提取的结果为d,则返回:d'th'形式,否则输出dd
                });
            }
            return $filter('date')(date, format);
        };
    }]);

这段代码作用就是将给定的时间戳按给定的时间格式输出,以下是几个测试的例子:

{{ 1488181707000 | ordinalDate :"yyyy-MM-dd HH:mm:ss"}}  //输出:2017-02-27 15:48:27

{{ 1488181707000 | ordinalDate :"yyyy-MM-d HH:mm:ss"}}  //输出:2017-02-27th 15:48:27

{{ 1488181707000 | ordinalDate :"yyyy-MM-dUm HH:mm:ss"}}  //输出:2017-02-27thU48 15:48:27

{{ 1488181707000 | ordinalDate :"yyyy-MM-d'Um' HH:mm:ss"}}  //输出:2017-02-27Um 15:48:27

js正则语法:

http://blog.csdn.net/zaifendou/article/details/5746988

http://blog.csdn.net/dihuiqin/article/details/52096549

标签: javascript
共有 人打赏支持
粉丝 187
博文 840
码字总数 521567
作品 5
×
孟飞阳
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: