最近在做一个托管教师端小程序,里面有一个功能是选择某个日期加载该老师相关的课程,这里就需要用到日历组件。基于后台返回的数据及减少对日历组件的修改,我选择了对小程序一开始自配备的转换时间格式方法进行了修改。用起来也没有太大毛病,坑就在这里埋下了。
// 有人注意过微信小程序自带的转换时间格式的代码吗?由于大量用到2018-01-02的格式,改了一个代码,一失足成千古恨,bug都是自己制造出来的
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(':')
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, "/");
};
总结
不要轻易的去改微信小程序提供工具类的代码,为什么用"/"可能是有原因的,微信已经帮你兼容好了。否则,就像我一样浪费时间踩来踩去的在这个坑里
作者简介:张敏,芦苇科技web前端开发工程师,低调冷幽默,深藏不露。代表作品:微鱼娃娃机系统、TopShow活动报名小程序。擅长网站建设、微信公众号开发、微信小程序开发、小游戏制作、企业微信制作、H5建设,专注于前端框架、交互设计、图像绘制、数据分析等研究。
欢迎和我们一起并肩作战: web@talkmoney.cn 访问 www.talkmoney.cn 了解更多
提供专业的微信公众号外包,靠谱的钉钉开发,深圳企业微信建设,高质量的微信小程序开发,广东小游戏开发,东莞H5制作