IOS时间格式问题调试与解决

问题现象

在测试IOS中一个H5页面的时候发现保存时间接口传递的参数是null

但是在Web-Chrome和安卓上测试发现是正常的

原因分析

new Date("2022-01-17 10:00").getTime()

也就是在执行上面代码的时候,返回的内容是null

调试的时候看到提示:

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

找了下相关文档:

  • IOS需要使用/连接年月日

  • 安卓需要使用-连接年月日

IOS设备在需要对时间戳进行判断的时候,如果不是使用的/则会出现问题,所以需要进行格式转换

调试方案

每次修改代码后重新部署后,然后使用IOS设备进行测试非常的不方便

所以如果有Mac电脑的话,直接使用模拟器进行测试

查找可用的苹果模拟器并打开

找到可以用的模拟器,记住它的udid,例如136437DC-4D51-4628-B8CF-A4A3F3DFF1B0

xcrun simctl list

打开设备

open -a Simulator --args -CurrentDeviceUDID xxxx

完整的语句为:

open -a Simulator --args -CurrentDeviceUDID 136437DC-4D51-4628-B8CF-A4A3F3DFF1B0
bff42c649522f00246f8cc15570e5d83.png
image

打开电脑上的Safari浏览器

开发-模拟器中打开Safari浏览器 页面检查器

955321c5862bc29a17cd3bd6eed2be15.png
image_1
1b2bcbc02efa3603ee5be9eb5ffe2b5b.png
image_2

在控制台输入刚才出问题的代码

16e05dec6f9cd05122c2616cf7b01263.png
image_3
> new Date("2022-01-17 10:00").getTime()
< NaN

同样的操作在Chrome上操作

10adb3439324492244dcb16d52919fc4.png
image_4

判断环境并转化格式

判断当前环境

使用navigator.userAgent可以拿到当前请求的userAgent

let ua = navigator.userAgent
let isIOS = !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)

根据isIOS就可以判断,当前环境是否是IOS了,然后就可以给出我们需要的时间格式了

let formatter = isIOS ? 'YYYY/MM/DD HH:mm' : 'YYYY-MM-DD HH:mm'

在转化时间戳之前对格式进行处理

let t = "2022-01-17 10:00"
t = isIOS ? t.replace(/-/g,'/') : t
let new_t = new Date(t).getTime()

zx钟诚挚邀请您注册并体验 wolai:

https://www.wolai.com/signup?invitation=AZRMVSI

https://www.wolai.com/mzwH2sMvxHGUirHwWPP2c5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值