需求
公司项目做一个需求,根据客户选择的日期时间下订单,需要把用户选择的时间转换为 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 NaN
const time = stringDate.getTime()
log('time', time) // time NaN
const stringTime = String(time).slice(0, 10)
log('stringTime', stringTime) // stringTime NaN
const 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
问题解决。