如图,需求是通过Ionic2 的 ion-datetime 实现一个时间选择器.
因为展示的初始化时间是从上个页面带过来的. 所以需要用到三个参数:
[(ngModel)]="times.start" 即当前展示的时间
[min]="times.min" 可选择的最小时间
[max]="times.max" 可选择的最大时间
我从上个页面传递过来的时间,时间格式是 YYYY-MM-DD HH:mm 输出结果 2017-07-08 05:52:00
但是在ionic2 上设置的时间格式是要 用ISO 标准 即: toISOString() 返回 Date 对象的字符串格式
输出结果 2017-07-08T05:52:00.486Z
这尼玛,首先想到的是,后台返给我的数据为啥不是时间戳呢?如果是时间戳,直接 new Date(时间戳).toISOString(); 不就完事了嘛
然后我现在就需要 将YYYY-MM-DD HH:mm 格式的数据 转换成时间戳[步骤一], 然后再new Date(时间戳).toISOString() [步骤二];
步骤一: this.start= new Date(上个页面传过来的固定格式的时间).getTime()+8*3600*1000; 这样就拿到时间戳了
步骤二: this.times.start = new Date(this.start).toISOString(); 转换完成后,这就是ISO格式的时间了.
经测试,google 调试模式下,安卓手机上 都能准确显示, 未读苹果设备上无法显示...why? 这么坑?
改了一上午也没弄清楚头绪. 最后根据经验判断,是因为这两次数据的转换涉及到计算, 从而导致页面跳转过去的时候,数据还没来得及渲染上去... 也就是说 这两次计算 造成的效率问题,影响了渲染展示.
然后,朋友直接就用 replace(' ','T')+'Z'; 完美解决.
对啊 怎么就没想到之别把 2017-07-08 05:52:00 转换成 2017-07-08T05:52:00.486Z这种数据格式呢?
然后经过测试,最后完美解决了苹果端 设置初始化时间无效的问题.
网友评论