需求
公司项目做一个需求,根据客户选择的日期时间下订单,需要把用户选择的时间转换为 10 位时间戳(不要最后三位的毫秒数,数据类型为: Number)返给后端
我的实现
const stringDate = new Date('2020-12-25 9:00') // 注意这里的 String 值const time = stringDate.getTime()const stringTime = String(time).slice(0, 10)const numberTime = parseInt(stringTime, 10)console.log('numberTime', stringTime)// 1608858000
遇到的问题
在 Android 的模拟器中,如我的预期,返回了十位时间戳,但是在真机测试时返回的确实 NaN。
刚开始有点懵,想了一下就在真机上开始 debug,
定位问题
代码及返回如下:
const log = console.log.bind(console)const stringDate = new Date('2020-12-25 9:00') // 注意这里的 String 值log('stringDate', stringDate) // stringDate NaNconst time = stringDate.getTime()log('time', time) // time NaNconst stringTime = String(time).slice(0, 10)log('stringTime', stringTime) // stringTime NaNconst numberTime = parseInt(stringTime, 10)console.log('numberTime', stringTime) // numberTime NaN
解决问题
问题定位到了,自然就比较好解决了,查看 Date 的 MDN 文档得知, 第 2 行的时间字符串格式有问题,官方文档中并没有'2020-12-25 9:00'这种格式。
然后将第 2 行中时间格式改为 MDN 文档中的时间格式为 '2020-12-25T9:0:00' 具体代码
const stringDate = new Date('2020-12-25T9:00:00') // 注意这里的 String 值const time = stringDate.getTime()const stringTime = String(time).slice(0, 10)const numberTime = parseInt(stringTime, 10)console.log('numberTime', stringTime)// 1608858000
问题解决。
