踩坑之ios手机new Date(yyyy-MM-dd hh:mm:ss).getTime()返回NaN

1、场景:

公司的小程序中有一个这样的功能,后端返回一个时间,时间格式是yyyy-MM-dd hh:mm:ss,然后前端根据这个时间和当前时间做比较,如果小于当前时间,则用户点击复习的按钮是能打开对应的复习页面的,否则就弹出弹框提示用户不能查看。对应的代码如下:

lesson.t_canReview
            =new Date().getTime() >= new Date(res.endTime).getTime()

这样看这个判断逻辑是没有问题的,但是用户在用苹果手机想要查看已经结束的课程的复习的页面时,发现一直提示不能查看,而用安卓手机是能查看的。

2、解决方案:

在排查问题的过程中,在苹果手机打开调试工具时,发现new Date(res.endTime).getTime()打印出的值是NaN。查阅资料才发现其实是ios对于时间格式为yyyy-MM-dd时计算其毫秒值会返回NaN。于是我们只要将时间格式转为yyyy/MM/dd即可解决这个问题

lesson.t_canReview
            = new Date().getTime() >= new Date(res.endTime.replace(/-/g, '/')).getTime()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码实现: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DeviceWorkTime { /** * 计算指定日期在设备工作时段内的工作时间(分钟) * @param workTimeStr 设备工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) * @param workStartTime 设备工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) * @param workEndTime 设备工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) * @param specifiedDate 指定日期(Date类型yyyy-MM-dd) * @return 工作时间(分钟) */ public static int calculateWorkTime(String workTimeStr, Date workStartTime, Date workEndTime, Date specifiedDate) { int workTime = 0; SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); String specifiedDateStr = new SimpleDateFormat("yyyy-MM-dd").format(specifiedDate); String[] workTimeArray = workTimeStr.split(";"); for (String time : workTimeArray) { String[] timeArray = time.split("-"); Date start = null; Date end = null; try { start = sdf.parse(timeArray[0]); end = sdf.parse(timeArray[1]); } catch (ParseException e) { e.printStackTrace(); } if (start != null && end != null) { Date workStart = new Date(); workStart.setTime(specifiedDate.getTime() + start.getTime()); Date workEnd = new Date(); workEnd.setTime(specifiedDate.getTime() + end.getTime()); if (workStart.before(workEndTime) && workEnd.after(workStartTime)) { if (workStart.before(workStartTime)) { workStart = workStartTime; } if (workEnd.after(workEndTime)) { workEnd = workEndTime; } workTime += (int) (workEnd.getTime() - workStart.getTime()) / (1000 * 60); } } } return workTime; } } ``` 使用示例: ```java public static void main(String[] args) throws ParseException { String workTimeStr = "09:00-12:00;13:00-18:00"; Date workStartTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 09:00:00"); Date workEndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 18:00:00"); Date specifiedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2022-01-01"); int workTime = DeviceWorkTime.calculateWorkTime(workTimeStr, workStartTime, workEndTime, specifiedDate); System.out.println("工作时间:" + workTime + "分钟"); } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值