zoukankan      html  css  js  c++  java
  • 关于jQuery插件jTemplate中时间转换的问题

    用过jTemplate的人可能都知道如果有时间类型的值在返回的数据中(json),
    时间会是/Date(1364478769713)/这样显示的,于是我们有了各种方法来规避这个看不懂的时间。
    方法一:
    使用设置参数的方法,具体代码如下:
    $("#result").setParam('DateFormat', DateFormat);
    
    function DateFormat(p_date) {
        var date = new Date(parseInt(p_date.replace("/Date(", "").replace(")/", ""), 10));
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        return date.getFullYear() + "/" + month + "/" + currentDate;
    }
    
    在代码中使用,如下:{$P.DateFormat($T.Item.StartTime)}
    
    方法二:
    直接修改jTemplate的源码,具体代码如下:
    
    大概在 行 104-106 之间添加:
    //set handlers 设置处理函数时,添加自己的处理函数
    this.f_cloneData = (this.settings.f_cloneData !== undefined) ? (this.settings.f_cloneData) : (TemplateUtils.cloneData);
    this.f_escapeString = (this.settings.f_escapeString !== undefined) ? (this.settings.f_escapeString) : (TemplateUtils.escapeHTML);
    this.f_parseJSON = (this.settings.f_parseJSON !== undefined) ? (this.settings.f_parseJSON) : ((this.settings.disallow_functions) ? (jQuery.parseJSON) : (TemplateUtils.parseJSON));
    
    this.f_timeConvert = (this.settings.f_timeConvert !== undefined) ? (this.settings.f_timeConvert) : (TemplateUtils.timeConvert);
    
    if (s == null) {
        return;
    }
    
    在 行319-323 之间添加:
    /**
    * Process template and get the html string.
    * @param {object} d data
    * @param {object} param parameters
    * @param {Element} element a HTML element
    * @param {Number} deep
    * @return {String}
    */
    Template.prototype.get = function (d, param, element, deep) {
        ++deep;
    
        if (deep == 1 && element != undefined) {
            jQuery.removeData(element, "jTemplatesRef");
        }
    
        /*添加了对/Date(...)/时间的转换*/
        this.f_timeConvert(d);
    
      var $T = d, $P, ret = '';
    
        //create clone of data
        if (this.settings.clone_data) {
            $T = this.f_cloneData(d, { escapeData: (this.settings.filter_data && deep == 1), noFunc: this.settings.disallow_functions }, this.f_escapeString);
        }
    
        //create clone of parameters
        if (!this.settings.clone_params) {
            $P = jQuery.extend({}, this._param, param);
        } else {
            $P = jQuery.extend({},
                this.f_cloneData(this._param, { escapeData: (this.settings.filter_params), noFunc: false }, this.f_escapeString),
                this.f_cloneData(param, { escapeData: (this.settings.filter_params && deep == 1), noFunc: false }, this.f_escapeString));
        }
    
        for (var i = 0, l = this._tree.length; i < l; ++i) {
            ret += this._tree[i].get($T, $P, element, deep);
        }
    
        this.EvalObj = null;
    
        --deep;
        return ret;
    };
    
    在 行367 TemplateUtils定义之后添加timeConvert方法
    /**
    * Template utilities.
    * @namespace Template utilities.
    */
    TemplateUtils = function () {
    };
    
    /**
    * ConvertTime to normal,
    * 使用递归,
    * 对所有出现的/Date(1364478769713)/都转换
    * 
    */
    var regTime = /^\/Date\(/;
    TemplateUtils.timeConvert = function (obj) {
        for (var i in obj) {
            if (regTime.test(obj[i])) {
                obj[i] = (new Date(parseInt(obj[i].replace("/Date(", "").replace(")/", ""), 10))).format("yyyy/MM/dd");
                //这里出现了一个 format("yyyy/MM/dd") 方法,在后边有说明
            } else {
                if (typeof (obj[i]) === "object") {
                    TemplateUtils.timeConvert(obj[i]);
                }
            }
        }
    };
    
    //---------Date.prototype.format--------------------//
    /*这里有个小问题(BUG) 如果毫秒是 SSS,只显示2位数,留给大家修改,
    我只提示一下在“00”+o[k] 那个地方有点小问题哦~*/
    /**
    * 对时间进行格式化的方法,
    * 使用例子:(new Date()).format("yyyy/MM/dd");
    */
    Date.prototype.format = function (format) {
        var o = {
            "M+": this.getMonth() + 1,  //month        
            "d+": this.getDate(),       //day        
            "h+": this.getHours(),      //hour        
            "m+": this.getMinutes(),    //minute        
            "s+": this.getSeconds(),    //second        
            "q+": Math.floor((this.getMonth() + 3) / 3), //quarter        
            "S+": this.getMilliseconds() //millisecond        
        };
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    };
  • 相关阅读:
    net.sf.fmj.media.cdp.civil.CaptureDevicePlugger addCaptureDevices解决方法
    SVN快速入门教程
    Struts 2详细工作流程
    未能加载.NET基类问题
    图片上传的例子
    一个.NET发邮件的简单例子
    一种巧妙的删除程序自己的方法
    oracle的问题
    javascript 中对Trim()的实现
    SQL Server 不存在或访问被拒绝的问题
  • 原文地址:https://www.cnblogs.com/icenter/p/2987785.html
Copyright © 2011-2022 走看看