Uniapp 日历组件在 iOS 上的 bug

昨天登录了一下苹果开发者账号,发现账号还没到期。其实现在账号的主要作用是用于家里的智能语音助力的签名打包,已方便自己在家里的各种手机和 ipad 上安装。

但是在打包安装到手机上之后发现了一个很严重的问题,那就是切换月份或者年的时候,切换后的日期变成了0-0。这就让人很尴尬了。

翻了下插件的评论,貌似也指出了问题的所在。但是并没有修改办法,

搜了一下网上的问题,貌似是ios系统上 new Date()出现的问题,this.currentDate 是YYYY/MM格式。不管怎么初始化都会返回null。补全为YYYY/MM/DD 格式的就能初始化了。为了调试这个bug,要在电脑上安装ios模拟器,真机调试折腾了半天不大好使。

为了装模拟器又删除了一大堆的文件,256的硬盘确实不怎么够用,安装个模拟器至少需要15g以上的磁盘空间。就 很离谱。

最后终于装上了,但是,调试也是个问题,并没有那么好调试。

今天早上想到既然ios有问题,那么safari可能也会有问题,用safari调试就方便哆啦。于是,在safari上面试了一下,果然有同样的bug。

并且表现形式也是完全一样的,现在就方便哆啦。并且也知道了问题的所在,那就直接重新初始化时间吧,虽然不专业但是解决这个bug还是ok的。

toYear(year) {
                console.log('toYear');
                if (!this.currentDate) return;
                let oldDate = this.currentDate;
                let backDate = this.currentDate;
                let tempCurrentDate = null;
                if (typeof this.currentDate === 'string') {
                    let tempCurrentDateString = this.currentDate;
                    if (tempCurrentDateString.length < 8) {
                        // console.log('short');
                        tempCurrentDateString = tempCurrentDateString + '/01';
                        tempCurrentDate = new EDate([tempCurrentDateString]);
                        backDate = new EDate([tempCurrentDateString]);
                    }
                }
                if (year === 0) {
                    const currentDate = new EDate().format('YYYY/MM');
                    if (currentDate === this.currentDate) return;
                    this.currentDate = currentDate;
                    this.setShowMonthList(this.currentIndex);
                } else {

                    backDate = EDate.modify(backDate, {
                        y: year
                    })
                    // backDate = 
                    this.currentDate = EDate.modify(tempCurrentDate, {
                        y: year
                    }).format('YYYY/MM');

                    this.setShowMonthList(this.currentIndex);

                    // this.currentDate = EDate.modify(this.currentDate, {
                    // 	y: year
                    // }).format('YYYY/MM');
                    // this.setShowMonthList(this.currentIndex);

                }
                this.$emit('date-change', this.currentDate, oldDate);
                this.$emit('year-change', backDate.format('YYYY-MM-DD'), oldDate);
            },

现在问题就解决啦。当然,解决的方法可能不高明,但是最起码解决问题了。嗯嗯。就先酱紫吧。

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《Uniapp 日历组件在 iOS 上的 bug》
* 本文链接:https://h4ck.org.cn/2023/11/14018
* 短链接:https://oba.by/?p=14018
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

5 comments

    1. 公主 Queen 
      Google Chrome 116 Google Chrome 116 Mac OS X 10.15 Mac OS X 10.15 cn山东省济南市 移动

      正在测试,不过 ios 上架可能会比较曲折~~

    1. 公主 Queen 
      Google Chrome 116 Google Chrome 116 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      现在上架需要app icp 备案,有开发者账号也不好使了。 shit 。就很尴尬。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注