easyUI的datagrid控制元件日期列格式化
阿新 • • 發佈:2019-02-01
轉自:https://blog.csdn.net/idoiknow/article/details/8136093
EasyUI是一套比較輕巧易用的Jquery控制元件,在使用過程中遇到一個問題,它的列表控制元件——datagrid, 在顯示日期列的時候,由於後臺返回給頁面的資料是Json格式的,其中的日期欄位,在後臺是正常的“2012-11-10 12:18:00”這樣的格式,json序列化後返回到前臺頁面就被轉換成一個像 /Date(1419264000000)/的格式,導致easyUI無法解析這個欄位。經過一番研究,自己搗鼓出來一個解決方案:
(以下所有程式碼都是前臺頁面的JS程式碼)
1.定義方法使日期列的顯示符合閱讀習慣:
[javascript]- function formatDatebox(value) {
- if (value == null || value == '') {
- return'';
- }
- var dt = parseToDate(value);//關鍵程式碼,將那個長字串的日期值轉換成正常的JS日期格式
- return dt.format("yyyy-MM-dd"); //這裡用到一個javascript的Date型別的拓展方法,這個是自己新增的拓展方法,在後面的步驟3定義
- }
- /*帶時間*/
- function formatDateBoxFull(value) {
- if (value == null || value == '') {
- return'';
- }
- var dt = parseToDate(value);
- return dt.format("yyyy-MM-dd hh:mm:ss");
- }
2.上面用到的日期處理方法
[javascript] view plain copy- function parseToDate(value) {
- if (value == null || value == '') {
- return undefined;
- }
- var
- if (value instanceof Date) {
- dt = value;
- }
- else {
- if (!isNaN(value)) {
- dt = new Date(value);
- }
- elseif (value.indexOf('/Date') > -1) {
- value = value.replace(/\/Date(−?\d+)(−?\d+)\//, '$1');
- dt = new Date();
- dt.setTime(value);
- } elseif (value.indexOf('/') > -1) {
- dt = new Date(Date.parse(value.replace(/-/g, '/')));
- } else {
- dt = new Date(value);
- }
- }
- return dt;
- }
- //為Date型別拓展一個format方法,用於格式化日期
- Date.prototype.format = function (format) //author: meizz
- {
- 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;
- };
3.步驟1定義的方法讓控制元件在閱讀狀態下的顯示得到糾正,但dataGrid控制元件還有行編輯狀態,行編輯狀態下還是會出現日期不能正常顯示的狀況,
此時需要拓展datagrid方法(這裡說成重寫比較貼切),使datagrid行編輯時,日期控制元件內的時間格式正確顯示:
[javascript] view plain copy- $.extend(
- $.fn.datagrid.defaults.editors, {
- datebox: {
- init: function (container, options) {
- var input = $('<input type="text">').appendTo(container);
- input.datebox(options);
- return input;
- },
- destroy: function (target) {
- $(target).datebox('destroy');
- },
- getValue: function (target) {
- return $(target).datebox('getValue');
- },
- setValue: function (target, value) {
- $(target).datebox('setValue', formatDatebox(value));
- },
- resize: function (target, width) {
- $(target).datebox('resize', width);
- }
- },
- datetimebox:{
- init: function (container, options) {
- var input = $('<input type="text">').appendTo(container);
- input.datetimebox(options);
- return input;
- },
- destroy: function (target) {
- $(target).datetimebox('destroy');
- },
- getValue: