需求

公司项目做一个需求,根据客户选择的日期时间下订单,需要把用户选择的时间转换为 10 位时间戳(不要最后三位的毫秒数,数据类型为: Number)返给后端

我的实现

  1. const stringDate = new Date('2020-12-25 9:00') // 注意这里的 String 值
  2. const time = stringDate.getTime()
  3. const stringTime = String(time).slice(0, 10)
  4. const numberTime = parseInt(stringTime, 10)
  5. console.log('numberTime', stringTime)
  6. // 1608858000

遇到的问题

在 Android 的模拟器中,如我的预期,返回了十位时间戳,但是在真机测试时返回的确实 NaN。
刚开始有点懵,想了一下就在真机上开始 debug,

定位问题

代码及返回如下:

  1. const log = console.log.bind(console)
  2. const stringDate = new Date('2020-12-25 9:00') // 注意这里的 String 值
  3. log('stringDate', stringDate) // stringDate NaN
  4. const time = stringDate.getTime()
  5. log('time', time) // time NaN
  6. const stringTime = String(time).slice(0, 10)
  7. log('stringTime', stringTime) // stringTime NaN
  8. const numberTime = parseInt(stringTime, 10)
  9. console.log('numberTime', stringTime) // numberTime NaN

基本定位问题出在上面代码的第 2 行

解决问题

问题定位到了,自然就比较好解决了,查看 Date 的 MDN 文档得知, 第 2 行的时间字符串格式有问题,官方文档中并没有'2020-12-25 9:00'这种格式。
然后将第 2 行中时间格式改为 MDN 文档中的时间格式为 '2020-12-25T9:0:00' 具体代码

  1. const stringDate = new Date('2020-12-25T9:00:00') // 注意这里的 String 值
  2. const time = stringDate.getTime()
  3. const stringTime = String(time).slice(0, 10)
  4. const numberTime = parseInt(stringTime, 10)
  5. console.log('numberTime', stringTime)
  6. // 1608858000

问题解决。