您的位置:首页 > 产品设计 > UI/UE

EasyUI Datetimebox 日期时间框 无论选中哪天的日期最后显示的都是当前日期 解决办法

2018-04-09 20:46 639 查看
问题起因: 使用 EasyUI Datetimebox 时重写了 formatter ,
以便获取自己想要的日期格式 , 但是无论选择哪天的日期 点了确定之后 显示的都是当天的日期 , 给日历添加了点击事件之后, 选中日期后弹出的是选中日期, 但是点击了确定之后弹出的却是当前日期

formatter:function(date){// 重写默认日期格式
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours().toString();
var minute = date.getMinutes().toString();
var second = date.getSeconds().toString();
return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' +second;
}
最后发现选中日期点击确定后, 会先调用 formatter
格式化日期, 之后会将格式化好的日期传递给 parser 进行解析 , 之后才会显示选中的日期

所以想要重写日期格式
正确的做法是 同时重写 formatter  和 parser  

formatter:function(date){// 重写默认日期格式
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours().toString();
var minute = date.getMinutes().toString();
var second = date.getSeconds().toString();
return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' +second;
},
parser: function (date) {
//重写formatter 必须 重写parser, 否则无论选择哪天, 日期均为当天日期
//xxxx-x-x xx:xx:xx
if (!date) return new Date();
var array = date.split(" ");// 分成日期和时间两部分
var arrayDate = array[0].split("-");
var yearStr = arrayDate[0];
var monthStr = arrayDate[1];
var dayStr = arrayDate[2];
var arrayTime = array[1].split(":");
var hour = arrayTime[0];
var minute = arrayTime[1];
var second = arrayTime[2];
var year = parseInt(yearStr,10);
var month = parseInt(monthStr,10);
var day = parseInt(dayStr,10);
if (!isNaN(year) && !isNaN(month) && !isNaN(day) && !isNaN(hour) && !isNaN(minute) && !isNaN(second)){
return new Date(year,month-1,day,hour,minute,second);
} else {
return new Date();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐