js getTime()转换时间结果为NAN

本文介绍了一种在iOS设备上使用JavaScript处理日期格式时遇到的问题,并提供了解决方案。原本的时间格式为“2020-11-1112:00:000”,直接使用getTime()会导致NaN。通过将短横线替换为斜杠解决了此问题。

最近写小程序遇到的坑实在多,下面说的是在一些苹果机上,getTime()获取时间戳出现的NAN的转换结果
原本的时间格式是这样的:2020-11-11 12:00:000

('2020-11-11 12:00:000').getTime() 在一些苹果机上无法得到正确的时间戳,而是得到NAN

解决:用正则将 - 替换成 /

	let newStr = v.dateStr.replace(/\-/g, '/') // 修复ios new Date('2020-11-11 12:00:00').getTime()获取不到时间的bug,将 - 替换成 /
	return new Date(newStr).getTime()
JavaScript中,当使用时间戳格式化日期时出现 `NaN-NaN-NaN` 的结果,通常是因为传递给 `Date` 构造函数的时间戳格式不正确。JavaScript的 `Date` 对象接受两种形式的时间戳: 1. **以毫秒为单位**的Unix时间戳(13位数字),例如:`1767196800000` 2. **以秒为单位**的Unix时间戳(10位数字),例如:`1767196800` 如果传递的是以秒为单位的时间戳,需要将其转换为毫秒,即乘以1000,然后再传递给 `Date` 构造函数。例如,时间戳 `1767196800` 是以秒为单位的,因此需要将其转换为 `1767196800000` 才能正确解析[^1]。 以下是一个示例函数,用于将时间戳格式化为可读的日期字符串: ```javascript function formatDate(timestamp) { // 将秒转换为毫秒 const date = new Date(timestamp * 1000); // 检查日期是否有效 if (isNaN(date.getTime())) { return "Invalid Date"; } const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始 const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } // 示例使用 const timestamp = 1767196800; console.log(formatDate(timestamp)); // 输出格式为 "2026-01-01" ``` 在上述代码中,首先将时间戳乘以1000,以确保其是以毫秒为单位的。接着,使用 `new Date()` 创建一个 `Date` 对象,并通过 `getFullYear()`、`getMonth()` 和 `getDate()` 方法获取年、月、日。为了确保月份和日期始终是两位数,使用了 `padStart(2, '0')` 来补零。 此外,还可以通过 `Date.parse()` 或 `Date.UTC()` 等方法来验证和解析日期,确保时间戳的有效性。如果时间戳无效,`Date` 对象的 `getTime()` 方法将返回 `NaN`,这时可以返回一个错误提示或默认值来处理异常情况[^1]。
JavaScript 中获取时间戳得到 `NaN` 结果,通常是由于日期格式不被支持导致的,尤其是在 iOS 系统中,日期格式的兼容性问题较为常见。以下是几种常见的解决办法: #### 1. 替换日期中的 `-` 为 `/` 在 iOS 系统中,`Date` 对象可能不识别 `YYYY-MM-DD` 格式,将其替换为 `YYYY/MM/DD` 格式可解决问题。 ```javascript let time = '2020-08-23 16:31:56'; let payTime = new Date(time.replace(/-/g, '/')).getTime(); console.log(payTime); ``` 此方法可兼容 Android 和 iOS 系统,能快速解决获取时间戳显示 `NaN` 的问题[^2][^3][^5]。 #### 2. 字符串转整数 在根据时间戳获取日期时,若出现 `NaN-NaN-NaN NaN:NaN:NaN` 的情况,可将字符串转换为整数。可以使用 `Number` 或 `parseInt` 方法。 ```javascript function getDate(timestamp) { var myDate = new Date(Number(timestamp) * 1000); var month = myDate.getMonth() + 1; // 获取当前月份(0 - 11, 0 代表 1 月) return myDate.getFullYear() + '-' + month + '-' + myDate.getDate() + ' ' + myDate.getHours() + ':' + myDate.getMinutes() + ':' + myDate.getSeconds(); } ``` 通过 `Number` 函数将时间戳字符串转换为整数,避免出现 `NaN` 结果[^4]。 #### 3. 使用 `Date.parse` 时转换格式 在微信小程序中使用 `Date.parse()` 获取时间戳,iOS 显示为 `NaN`,可将日期格式转换为 `YYYY/MM/DD` 格式。 ```javascript var data = '2018-03-09 12:00:00'; var format = data.replace(/-/g, '/'); var countDown = Date.parse(new Date(format)); ``` 这样能使 `Date.parse` 在 iOS 系统中正常工作[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值