小程序自定义组件问题
发布于 6 年前 作者 xiulan89 6538 次浏览 来自 问答

小程序自定义组件里面:

const dateStr = formatTime(new Date(date), enableTime ? 'yyyy-MM-dd hh:mm' : 'yyyy-MM-dd');


const dateStr1 = '2017-12-12'


console.log(dateStr)


console.log(dateStr1)


this.triggerEvent('onselectdate', { date: dateStr });

formatTime是自己写的时间格式化

这里两个log打印出来的都是合法日期字符串,

–>  2017-11-16

–>  2017-12-12

诡异的事情来了,triggerEvent,在模拟器上,无论使用dateStr,还是dateStr1作为事件参数,在引用组件的页面上,e.detail都是正常的:

{ date: ‘2017-11-16’ } 或者 { date: ‘2017-12-12’ }


但是在真机上,

使用dateStr1,正常,e.detail是 { date: ‘2017-12-12’ },

使用dateStr有问题,e.detail是 { date: ‘NaN-aN-aN’ },


什么情况????

5 回复

如果是用Date对象提供的方法,各个平台js引擎的实现会不一样。

问题查出来了,记录一下。

不知道是各平台js引擎的问题还是小程序问题

对于

const a = new Date(‘2017-12-12 12:12:12’)

在android上是正常的,在ios上a肯定是null

换成

const a = new Date(‘2017/12/12 12:12:12’)

就ok了

我自己试了下并没啥问题。再检查下你的代码?

P.S. 本问题与自定义组件无关。

你好,请检查你的formatTime实现。如果是用Date对象提供的方法,各个平台js引擎的实现会不一样。

好吧,formtime应该是没问题

仔细调试后发现

出在这几行上,感觉仍然是真机和模拟器的问题啊:

console.log(selected.join('-') + ' ' + this.data.time);
 
const date = selected.join('-') + ' ' + this.data.time;
 
console.log(date, new Date(date))

注意,第一个log在真机和模拟器删个一样:

>> 2017-11-16 17:52

第二个log就出问题了

真机上:

>> null null

模拟器上:

2017-11-16 17:17 Thu Nov 16 2017 17:17:00 GMT+0800 (中国标准时间)

无论如何 date 不该是null吧。。。。

回到顶部