Date对象 IOS踩坑

Date对象 IOS踩坑

最近在作一个托管教师端小程序,里面有一个功能是选择某个日期加载该老师相关的课程,这里就须要用到日历组件。基于后台返回的数据及减小对日历组件的修改,我选择了对小程序一开始自配备的转换时间格式方法进行了修改。用起来也没有太大毛病,坑就在这里埋下了。小程序

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}

因为开发和调试一直用的是微信开发者工具,在开发过程当中也很顺利,直到使用了真机进行测试的。在安卓机上是没有问题的,但一旦遇到了苹果机,个人整个功能就垮掉了。排查了好久才发现是日期转换的问题。微信小程序

在开发中,因为与日历相关,确定会大量用到Date对象的。
当使用微信

var date = new Date();

在安卓和苹果机上是能够运行且有结果的。
可是在这个项目里面须要用到根据字符串去获取日期,而后问题就来了。个人字符串日期格式是2018-01-01类型的微信开发

var date = new Date("2016-05-31");

这段代码是得到字符中指定的日期,它Firefox、Chrome中就能运行,可是在苹果手机就会报错,错误是NaN,意思是Not a Number。就是由于这个错,苹果手机不能正常运行。函数

解决方法

var date =new Date("2016/05/31");

这种字符串格式获取日期在苹果和安卓机上都能正常运行。因为代码中大量用到的是-模式。在使用new Date的时候写一个函数去转换一下便可。工具

function GetDateDiff(startDiffTime, endDiffTime) {
            //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 
            startTime = startDiffTime.replace(/\-/g, "/");
            endTime = endDiffTime.replace(/\-/g, "/");
};

总结

不要轻易的去改微信小程序提供工具类的代码,为何用"/"多是有缘由的,微信已经帮你兼容好了。不然,就像我同样浪费时踩来踩去的间在这个坑里测试

相关文章
相关标签/搜索