【兼容问题 | 小程序】解决Date.parse()获取时间戳IOS不兼容的问题

本文介绍了一个在iOS设备上使用Date.parse()方法遇到的兼容性问题,当输入特定格式的日期字符串时,该方法返回NaN。文章提供了解决方案,即通过正则表达式替换日期中的短横线为斜杠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写小程序时,发现一个神奇的bug,就是Date.parse()获取的时间戳IOS不兼容,显示为NaN。

平常像下面这么写,例如:

var timeStr0 = '2018-6-21';
    var timeStr1 = '2018-06';
    var timeStr3 = '2018-6';
    var timeStr2 = '2018-06-21 23:59:59';
    var timeStamp0 = Date.parse(timeStr0) / 1000;
    console.log("timeStamp0:" + timeStamp0); //1529510400
    var timeStamp1 = Date.parse(timeStr1) / 1000;
    console.log("timeStamp1:" + timeStamp1); //1527811200----是2018/6/1 8:0:0时间戳
    var timeStamp3 = Date.parse(timeStr3) / 1000;
    console.log("timeStamp3:" + timeStamp3); //1527782400---是2018/6/1 0:0:0时间戳
    var timeStamp2 = Date.parse(timeStr2) / 1000;
    console.log("timeStamp2:" + timeStamp2); //1529596799

但是到了ios版本里面,时间戳都变成了NaN,安卓版本和微信开发者工具中显示正常。

 

问度娘了一会儿之后,发现因为ios只识别"2017/01/01"这样的日期格式;所以,解决办法如下:(用正则把“-”替换成“/”)

var timeStr = '2018-06-21';
    var timeStamp = Date.parse(timeStr.replace(/-/g, '/'))/1000;
    console.log("timeStamp:" + timeStamp);

总结:尽量还是要用"2017/01/01"这样的日期格式来转时间戳,避免了兼容问题,同时也避免掉了'2018-6'与'2018-06'转时间戳不同的问题。

 

启蒙链接:https://blog.youkuaiyun.com/zqtsx/article/details/74331076

### JavaScript中的`Date.parse()`和`new Date` #### `Date.parse()` `Date.parse()` 函数用于解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日 UTC 时间零点之间的毫秒差值[^2]。 对于不同的浏览器环境,`Date.parse()` 对某些特定格式的支持可能有所不同。例如,在 Android 浏览器环境中可以成功解析 "YYYY-MM-DD HH:mm:ss" 这样的时间格式;但在 iOS 的 Safari 上则无法正常工作[^4]。 因此建议开发者们尽量采用广泛兼容的标准 ISO8601 或 RFC2822 格式的日期表达方式来确保跨平台的一致性和可靠性。 ```javascript // 正确使用ISO8601标准的时间格式 const timestamp = Date.parse('2023-10-05T14:48:00Z'); console.log(timestamp); // 输出对应的Unix时间戳(以毫秒计) ``` #### 使用 `new Date()` 创建一个新的 `Date` 实例可以通过多种方式进行初始化: - 不带参数:当前本地时间为默认值; - 字符串形式:传入符合上述提到过的标准化格式之一作为构造函数输入; - 数字型 Unix Time Stamp (单位为ms): 表示自纪元起经过了多少毫秒。 当利用带有具体时区信息的完整时间表示法构建对象实例时,所得到的结果会自动转换成本地计算机设置下的相应时刻显示出来。 ```javascript // 创建基于给定时间字符串的新Date对象 let dateInstance = new Date('October 5, 2023 11:13:00'); // 打印出完整的日期时间和其内部存储的形式即UTC时间戳 console.log(dateInstance.toString()); // 显示为人读取友好的全貌视图 console.log(dateInstance.valueOf()); // 获取到的是从UNIX Epoch开始计算至此刻经历过的总毫秒数 // 如果想要获取某一部分的具体数值比如年份可以用getFullYear() console.log(dateInstance.getFullYear()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值