html5时间控件格式转换,自定义EasyUI的datetimebox控件日期时间的显示格式(转)...

工作中遇到的问题,在此记录一下。

需求:前台页面使用了EasyUI框架,在某一个html页面中要求datetimebox显示格式为年月日和小时,如图所示:

f77bf3ddf988045baedf66dbd4f348fe.png

尝试过两种方法,分别如下:

第一种方法:

datetimebox 依赖 datebox和timespinner两个组件,拥有datebox的formatter格式化日期和时间显示方式的属性;

重写了formatter属性,来改变日期框的显示方式

$.fn.datetimebox.defaults.formatter = function(date){

//显示格式: 2017-05-08 17(只显示年月日和小时)

var year = date.getFullYear();

var month = date.getMonth() + 1;

var day = date.getDate();

var hour = date.getHours();

month = month < 10 ? '0' + month : month;

day = day < 10 ? '0' + day : day;

hour = hour < 10 ? '0' + hour : hour;

return year + "-" + month + "-" + day + " " + hour;

}1

2

3

4

5

6

7

8

9

10

11

L3Byb3h5L2h0dHAvc3RhdGljLmJsb2cuY3Nkbi5uZXQvaW1hZ2VzL3NhdmVfc25pcHBldHMucG5n.jpg

1

2

3

4

5

6

7

8

9

10

11

重写之后,效果可以正常显示出来,前后台交互也没有问题,但是它把当前系统其它页面中的datetimebox的显示方式全部改掉了。这肯定是不行的了。

第二种方法:

给easyui的datetimebox控件添加formatter和parser两个属性,并定义对应的函数方法;

1

L3Byb3h5L2h0dHAvc3RhdGljLmJsb2cuY3Nkbi5uZXQvaW1hZ2VzL3NhdmVfc25pcHBldHMucG5n.jpg

1

//修改日历框的显示格式

function formatter(date){

var year = date.getFullYear();

var month = date.getMonth() + 1;

var day = date.getDate();

var hour = date.getHours();

month = month < 10 ? '0' + month : month;

day = day < 10 ? '0' + day : day;

hour = hour < 10 ? '0' + hour : hour;

return year + "-" + month + "-" + day + " " + hour;

}

function parser(s){

var t = Date.parse(s);

if (!isNaN(t)){

return new Date(t);

} else {

return new Date(s + ":00:00");

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

L3Byb3h5L2h0dHAvc3RhdGljLmJsb2cuY3Nkbi5uZXQvaW1hZ2VzL3NhdmVfc25pcHBldHMucG5n.jpg

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

d8f59854ae119e296120a2d8ccf3bd47.png

其它页面:

1833820c87e6c2e5e56d355f5bfe527d.png

此时页面时间格式正常显示,且不会对其它页面产生影响;

但是出现了兼容性的问题,在Chrome中正常,在Firefox中显示如下:

0ee31289f6fc082f3b0480ccfe7adaac.png

通过调试,最终发现是formatter函数中return语句中拼接字符串时,小时前面有多个空格导致的,只保留一个空格就可以正常显示;

客户需求是小时与日期间隔不能太近,因为容易理解错误,要求离远点;

于是在parser函数中使用s = s.replace(/\s+/,' ')对参数进行处理即要。

完善后的parser函数代码如下:

function parser(s){

s = s.replace(/\s+/,' ');//解决格式字符串中多个空格拼接在Firefox中无法兼容的问题

var t = Date.parse(s);

if (!isNaN(t)){

return new Date(t);

} else {

return new Date(s + ":00:00");

}

}1

2

3

4

5

6

7

8

9

L3Byb3h5L2h0dHAvc3RhdGljLmJsb2cuY3Nkbi5uZXQvaW1hZ2VzL3NhdmVfc25pcHBldHMucG5n.jpg

1

2

3

4

5

6

7

8

9

现在有多个空格将日期与小时隔离开,在Firefox中也可以正常显示了。效果如下图:

a3b3d1e7b7a8c6bed24a0c57951a0772.png

总结:

第一种重写formatter方法后,它直接重写了easyui的日期时间控件的显示方式,导致所有页面的格式都会按照重写后的格式来显示;

第二种是将需要重写格式的控件引用对应的样式,不会对其它页面相同的控件产生影响;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值