new Date()在ios中的那些坑
new Date()在ios中的那些坑最近在做一个公众号的考勤请假功能,需在选完请假开始时间、结束时间后计算出请假时长,于是封装了一个计算时间差的公共方法下面是我最开始的代码,本以为直接拿到这两个时间戳比较计算出结果就可以了,没想到踩到了坑。。。//计算两个时间差utils.getDuration = (start, end) => {let startTime = new Date(sta
·
new Date()在ios中的那些坑
最近在做一个公众号的考勤请假功能,需在选完请假开始时间、结束时间后计算出请假时长,于是封装了一个计算时间差的公共方法
下面是我最开始的代码,本以为直接拿到这两个时间戳比较计算出结果就可以了,没想到踩到了坑。。。
//计算两个时间差
utils.getDuration = (start, end) => {
let startTime = new Date(start).getTime()
let endTime = new Date(end).getTime()
let usedTime = endTime - startTime; //两个时间戳相差的毫秒数
let days = Math.floor(usedTime/(24*3600*1000))
let leave1 = usedTime % (24 * 3600 * 1000);// 获取毫秒数
let hours = Math.floor(leave1 / (3600 * 1000));// 获取小时数
let leave2 = leave1 % (3600 * 1000);// 排除小时的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000));// 获取分钟
return days + '天' + (hours > 9 ? hours : "0" + hours) + "小时" + (minutes > 9 ? minutes : "0" + minutes) + "分钟"
},
在手机模拟器中亲测确实没有问题,发布以后,在Android手机上亲测也没有问题,然而。。。在ios真机上出现问题了,显示NaN
问题出现了,就得找原因啊,最后发现是因为new Date()在ios上是有格式要求的,目前年月日只支持xxxx/xx/xx格式,而上述代码中拿到的start、end格式都是被我转化成以‘-’分割的格式,原因找到了就好办啦,既然必须是‘/’分割,那就把‘-’替换一下呗,下面是修改后的代码,采用正则表达式将 ‘/’ 替换成 ‘-’
//计算两个时间差
utils.getDuration = (start, end) => {
let startDate = start.replace(/\-/g,"/")
let endDate = end.replace(/\-/g,"/")
let startTime = new Date(startDate).getTime()
let endTime = new Date(endDate).getTime()
let usedTime = endTime - startTime; //两个时间戳相差的毫秒数
let days = Math.floor(usedTime/(24*3600*1000))
let leave1 = usedTime % (24 * 3600 * 1000);// 获取毫秒数
let hours = Math.floor(leave1 / (3600 * 1000));// 获取小时数
let leave2 = leave1 % (3600 * 1000);// 排除小时的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000));// 获取分钟
return days + '天' + (hours > 9 ? hours : "0" + hours) + "小时" + (minutes > 9 ? minutes : "0" + minutes) + "分钟"
},
相信很多人都踩过这个坑,下次注意点吧。。。
更多推荐
已为社区贡献1条内容
所有评论(0)