ios移动端JS获取指定日期时间戳出现NAN的问题

本文介绍了一种在iOS设备上解决将特定日期格式转换为时间戳时出现NaN的解决方案。通过将日期字符串中的“-”替换为“/”,可以确保在所有平台上正确解析日期。

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

问题

在做移动端项目时,发现获取将指定日期通过new Date().getTime()转换成时间戳时,在电脑和安卓机上显示正常,ios上显示NAN

let date = '2019-05-16 12:00'
console.log(new Date().getTime(date))
// 电脑上:1557979200000
// 安卓上:1557979200000
// ios上: NAN

解决方法

用正则把 “-” 换成 “/” ,让时间格式变成以下格式

let date = '2019-05-16 12:00'
date = date.replace(/-/g, '/')
console.log(new Date().getTime(date))
// 1557979200000
<think>好的,用户现在想用JavaScript计算指定日期的时间戳。我需要结合之前的对话和引用内容来给出合适的回答。首先,用户之前的问题是关于计算7天的时间戳,现在进阶到如何获取指定日期的时间戳。之前的回答中提到了两种方法:直接计算毫秒数和基于当前时间计算未来时间戳。现在需要扩展这个思路到指定日期。查看用户提供的引用内容,引用[1]提到Date.parse()方法,可以将日期字符串转为时间戳,但精确到秒。引用[2]中的例子展示了如何通过Date对象设置时间并获取时间戳。引用[3]中也有使用newDate()创建日期对象并调用getTime()的例子。所以,总结起来,主要有两种方法:使用Date.parse()和使用Date对象的getTime()方法。需要注意的是Date.parse()的精度问题,用户可能需要注意这一点。此外,创建Date对象时,不同的参数格式可能会导致时区问题,需要提醒用户注意。接下来,回答的结构应该分步骤,先介绍直接使用Date.parse(),再介绍使用Date对象和getTime()。同时,要提到时区的影响,比如字符串格式是否带时区信息会影响结果。此外,示例代码需要展示不同情况,比如带时间和不带时间的情况。可能还需要指出Date.parse()的兼容性问题,比如不同浏览器对日期字符串的解析可能有差异,推荐使用符合ISO8601的格式。同时,注意Date对象月份是从0开始的,这点在手动构造日期时需要注意。 最后,生成相关问题,可能涉及如何转换时间戳到日期、如何处理时区差异、为什么Date.parse()精度不够等,参考之前的对话内容。</think>### 使用JavaScript计算指定日期时间的方法 在JavaScript中获取指定日期的时间戳,可通过以下两种核心方法实现: --- #### 方法一:直接解析日期字符串 使用`Date.parse()`方法将符合格式的日期字符串转换为时间戳(**注意:结果单位为毫秒但仅精确到秒级**) ```javascript // 示例:解析"2022-10-01 00:00:00"的时间戳 const timestamp = Date.parse("2022-10-01T00:00:00"); console.log(timestamp); // 输出1664582400000 [^1] ``` **参数格式要求**: - 推荐使用ISO 8601格式:`YYYY-MM-DDTHH:mm:ss` - 兼容格式如:`MM/DD/YYYY HH:mm:ss` --- #### 方法二:创建Date对象后获取 通过`new Date()`构造日期对象,再调用`.getTime()`方法获取精确到毫秒的时间戳: ```javascript // 示例1:使用日期字符串初始化 const date1 = new Date("2023-05-20 08:30:45"); console.log(date1.getTime()); // 输出精确到毫秒的时间戳[^3] // 示例2:参数化构造日期 const date2 = new Date(2023, 4, 20, 8, 30, 45); // 月份从0开始计数 console.log(date2.getTime()); // 输出1684564245000[^2] ``` **关键区别**: - `.getTime()`返回毫秒级精度,而`Date.parse()`舍去毫秒部分[^1] - 参数化构造时,月份参数范围为$0$(1月)到$11$(12月)[^2] --- ### 时区处理注意事项 1. **隐式时区转换**: ```javascript // 无时区标识的字符串将按浏览器时区解析 new Date("2023-01-01").getTime() !== new Date("2023-01-01T00:00:00Z").getTime() ``` 2. **显式指定UTC时间**: ```javascript const utcDate = Date.UTC(2023, 0, 1); // 返回UTC时间戳 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值