完美解决layui的util.toDateString时间格式化在ie下出现NaN的问题

分享 已结
1 218
MoCno
MoCno 2018-7-19
悬赏:20飞吻
完美解决layui的util.toDateString时间格式化在ie下出现NaN-NaN-NaN NaN:NaN:NaN的问题,如图:


问题原因:
因为js的new Date()方法,在不同的浏览器兼容的格式不一样,具体原因请看博客: https://www.jb51.net/article/123540.htm

所有主流浏览器都支持的格式为: var dateTime = new Date("2017/09/12 13:42:00");

一些浏览器不支持new Date("2017-09-12 13:42:00");

我们后台返回的json里面的时间格式有两种,一种是这样的:



就是long类型的,这种是默认的,json默认会把Date转成默认的long类型。这种格式不会出现NaN的问题。

还有一种是这样的:



这种格式一般都是后台使用日期类型转换器,如果是spring boot项目就是这种格式的,因为spring boot默认带的有日期类型转换器。

对于第二种格式的,使用layui的util.toDateString在ie下就会出现NaN-NaN-NaN NaN:NaN:NaN,解决方法很简单:
如果spring boot项目,在配置文件中添加如下配置:
## json时间格式设置
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy/MM/dd HH:mm:ss
如果是ssm项目,请自行修改你的时间转换器为上图所示的时间格式,不要使用“-”,使用“/”。

然后这样json返回的时间就是“yyyy/MM/dd HH:mm:ss”这种格式了,如果你需要其他格式,比如“yyyy-MM-dd”,使用layui的util.toDateString就可以兼容ie了。


如果没有使用layui,我这里贴一个js的方法:
//时间格式转换
function formatDate(value, fmt) {
if (value == null || value == "") {
return null;
}
var date = new Date(value);

if(!fmt) {
fmt = 'yyyy-MM-dd HH:mm:ss';
}

var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"H+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
回帖
  • 洪点
    2018-7-20
    IE下面前端直接改就行
    layui.util.toDateString(new Date('2018-05-30T05:40:39.000+0000').getTime());
    0 回复