• 日期控件封装


    /**
     * Created by joan on 16/10/12.
     */
    var $ = require('jquery'),
        Calendar = require('hermes-calendar');
    
    /**
     * html 示例如下
     * <div class="jui-form-item J_timeFormItem">
     *      <label class="jui-input-label"><span class="jui-label-required">时间</span></label>
     *      <span class="time-descripte fn-mr5">从:</span><input readonly="readonly" placeholder="2015-10-02 09:12" type="text" class="jui-input" name='startTime' id="J_startTime" value="$!servicePromotionVO.startTimeStr">
     *      <span class="time-descripte fn-ml5 fn-mr5">至:</span><input readonly="readonly" placeholder="2015-10-10 19:21" type="text" class="jui-input" name='endTime' id="J_endTime" value="$!servicePromotionVO.endTimeStr">
     *      <div class="jui-form-tip J_timeTip ft-error">
     *      </div>
     *</div>
     *
     * 调用方式
     * newCalendar.init({
     *       errorItem : $('.ft-error'), //控件展示错误提示信息的区域
     *       juiFormItem : $('.J_timeFormItem'), //控件jui-form-item节点
     *       startTime : $('#J_startTime').val(), //开始时间
     *       endTime : $('#J_endTime').val() //结束时间
     * });
     *
     * 对象包含如下方法
     * @type {{init: newCalendar.init, showErr: newCalendar.showErr, hideErr: newCalendar.hideErr, initCalendar: newCalendar.initCalendar, getNowTime: newCalendar.getNowTime, checkTime: newCalendar.checkTime}}
     */
    var newCalendar = {
        init:function(params){
            this.initCalendar(params);//初始化Canlendar
        },
        /**
         * 校验错误信息展示
         * @param errorItem {Object Object}[错误信息dom节点]
         * @param juiFormItem {Object Object}[控件item]
         * @param err {Object String}[错误信息字符串]
         */
        showErr:function(errorItem,juiFormItem,err){
            errorItem.html(err||'');
            if(!juiFormItem.hasClass('jui-form-item-error')){
                juiFormItem.addClass('jui-form-item-error');//出错input框红色高亮显示
            }
        },
        /**
         * 校验错误信息展示
         * @param errorItem {Object Object}[错误信息dom节点]
         * @param juiFormItem {Object Object}[控件item]
         * @param err {Object String}[控件默认提示信息]
         */
        hideErr:function(errorItem,juiFormItem,err){
            errorItem.html(err||'');
            if(juiFormItem.hasClass('jui-form-item-error')) {
                juiFormItem.removeClass('jui-form-item-error');//出错input框红色高亮显示
            }
        },
        /**
         * 初始化时间选择控件
         */
        initCalendar:function(params){
            var self = this,
                errorItem = params.errorItem,
                juiFormItem = params.juiFormItem,
            // 时间选择
                nowTime = self.getNowTime();
    
            // 开始时间
            var startCalendar = new Calendar({
                trigger: "#J_startTime",
                format: "YYYY-MM-DD HH:mm",
                range: [nowTime.date,null],
                events: {
                    'click [data-role=confirm]': function(ev) {
                        var showTime = this.getTime().format(this.get('format')),
                            endTime = params.endTime;
                        this.output(showTime);
                        this.hide();
                        if(!!endTime){//存在结束时间才触发校验
                            if (!self.checkTime(params)) {
                                return;
                            }
                        }
    
                    }
                }
            });
    
            // 结束时间
            var endCalendar = new Calendar({
                trigger: "#J_endTime",
                format: "YYYY-MM-DD HH:mm",
                range: [nowTime.date,null],
                events: {
                    'click [data-role=confirm]': function(ev) {
                        var showTime = this.getTime().format(this.get('format')),
                            startTime = juiFormItem.startTime;
                        this.hide();
                        if(!startTime){
                            self.showErr(errorItem,juiFormItem,'请先选择开始时间');
                            return;
                        }
                        this.output(showTime);
                        if (!self.checkTime(params)) {
                            return;
                        }
    
                    }
                }
            });
    
            //重新设置时间选择范围
            startCalendar.on('selectDate', function (date) {
                endCalendar.range([date,null]);
            });
    
        },
        /** 获取当前时间
         *  @timeStr 自定义时间,格式支持时间辍或类型2015-12-12 12:38
         */
        getNowTime: function(timeStr) {
            var formatVal = function(val) {
                    return val > 9 ? val : '0'+val;
                },
                nowTime = timeStr ? new Date(timeStr) : new Date(),
                nowYear = nowTime.getFullYear(),
                nowMonth = formatVal(nowTime.getMonth() + 1),
                nowDate = formatVal(nowTime.getDate()),
                nowHour = formatVal(nowTime.getHours()),
                nowMin = formatVal(nowTime.getMinutes()),
    
            // 2016-9-28
                localeDate = nowYear+'-'+nowMonth+'-'+nowDate,
    
            // 12:38
                times = nowHour+':'+nowMin;
    
            return {
                time: nowTime,
                date: localeDate,
                times: times,
                hour: nowHour,
                min: nowMin
            }
        },
        /**
         * 验证开始时间小于结束时间
         */
        checkTime: function(params) {
            var self = this,
                errorItem = params.errorItem,
                juiFormItem = params.juiFormItem,
                timeVal = function(str) {
                    var result = new Date(str.replace(/-/g,'/')).getTime();
                    return result;
                },
                startTimeStr = params.startTime,
                startTime = timeVal(startTimeStr),
                endTimeStr = params.endTime,
                endTime = timeVal(endTimeStr);
            if (!startTime){
                self.showErr(errorItem,juiFormItem,'请输入开始时间');
                return false;
            }
            if(!endTime){
                self.showErr(errorItem,juiFormItem,'请输入结束时间');
                return false;
            }
            if(startTime >= endTime) {
                self.showErr(errorItem,juiFormItem,'结束时间需大于开始时间');
                return false;
            }
            self.hideErr(errorItem,juiFormItem,'');
            return true;
        }
    }
    
    
    newCalendar.init({
        errorItem : $('.ft-error'), //控件展示错误提示信息的区域
        juiFormItem : $('.J_timeFormItem'), //控件jui-form-item节点
        startTime : $('#J_startTime').val(), //开始时间
        endTime : $('#J_endTime').val() //结束时间
     });
    module.exports = newCalendar;

     附:标准时间转换函数

    // 中国标准时间 转换函数 JS
     getFormat :function(time, format) {
      // if (typeof time === 'Array') {
    
      var t = new Date(time);
      var tf = function (i) {
        return (i < 10 ? '0' : '') + i;
      };
      return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) {
        switch (a) {
        case 'yyyy':
          return tf(t.getFullYear());
        case 'MM':
          return tf(t.getMonth() + 1);
        case 'mm':
          return tf(t.getMinutes());
        case 'dd':
          return tf(t.getDate());
        case 'HH':
          return tf(t.getHours());
        case 'ss':
          return tf(t.getSeconds());
        }
      });
    
    }
  • 相关阅读:
    使用kindeditor时,取不到值
    .net Eval 绑定截取字符串
    学习GeoServer遇到的问题及答案
    爬虫用开源代理池比较
    jenkins自动化部署gitlab上maven程序
    Notepad++编辑.sh文件
    springboot的jar在linux运行
    python3安装web.py
    linux java -jar
    linux安装nginx
  • 原文地址:https://www.cnblogs.com/weilantiankong/p/5956147.html
Copyright © 2020-2023  润新知