在测试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设备进行测试非常的不方便
所以如果有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
image
打开电脑上的Safari浏览器
在开发
-模拟器
中打开Safari浏览器 页面检查器
image_1
image_2
在控制台输入刚才出问题的代码
image_3
> new Date("2022-01-17 10:00").getTime()
< NaN
同样的操作在Chrome上操作
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()