收藏
回答

小程序自定义组件问题


小程序自定义组件里面:


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' },


什么情况????

最后一次编辑于  2017-11-16
回答关注问题邀请回答
收藏

5 个回答

  • LastLeaf
    LastLeaf
    2017-11-17

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

    2017-11-17
    有用
    回复
  • LastLeaf
    LastLeaf
    2017-11-16

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


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

    2017-11-16
    有用
    回复
  • LastLeaf
    LastLeaf
    2017-11-16

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

    2017-11-16
    有用
    回复
  • 杨泉
    杨泉
    2017-11-17

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

    不知道是各平台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了

    2017-11-17
    有用
    回复
  • 杨泉
    杨泉
    2017-11-16

    好吧,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吧。。。。


    2017-11-16
    有用
    回复
登录 后发表内容