收藏
回答

微信小程序苹果8 new Date()获取时间与安卓和苹果6不一样 多8小时?

   countDown(key, endTimeList, that,) {//倒计时函数
    /**
     * key 是setData 的属性名字
     * endTimeList 是结束时间列表
     */
    // 获取当前时间,同时得到活动结束时间数组
    let newTime = new Date().getTime();
    let countDownArr = [];
    // 对结束时间进行处理渲染到页面
    endTimeList.forEach(o => {
      let endTime = new Date(o).getTime();
      let obj = null;
      // 如果活动未结束,对时间进行处理
      if (endTime - newTime > 0) {
        let time = (endTime - newTime) / 1000;
        // 获取天、时、分、秒
        let day = parseInt(time / (60 * 60 * 24));
        let hou = parseInt(time % (60 * 60 * 24) / 3600);
        let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
        let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
        obj = this.timeFormat(day)+':'+this.timeFormat(hou)+':'+this.timeFormat(min)+':'+this.timeFormat(sec)
        
      } else {//活动已结束,全部设置为'00'
        obj = "00:00:00"
      }
      countDownArr.push(obj);
    })
    // 渲染,然后每隔一秒执行一次倒计时函数
    that.setData({ [key]: countDownArr });
    // 函数内调用自身,,重复使用setTimeout 就每隔一秒调用一次了
    that.data.toTime=  setTimeout(() => { this.countDown(key, endTimeList, that) }, 1000);
  
  }
回答关注问题邀请回答
收藏

4 个回答

  • ひそか
    ひそか
    2020-06-18

    花了点时间解决了这个问题,描述下问题:

    小程序ios真机显示的时间多了八个小时,安卓没这个问题。而且开发工具模拟器没有这个问题,显示时间正常,真机调试也不会出现这个问题……他只有在线上版本和体验版ios真机才会出现这个问题……

    后端传过来的时间格式: "2020-04-23T11:21:04.254"

    toTime(strTime) {
            if (!strTime) {
                return '';
            }
            var myDate = new Date(strTime + '+0800');
            if (myDate == 'Invalid Date') {
                strTime = strTime.replace(/T/g, ' '); //去掉T
                strTime = strTime.replace(/-/g, '/');
                strTime = strTime.replace(/\.\d+/, ' '); //去掉毫秒
                myDate = new Date(strTime + '+0800');
            }
            var d = new Date(myDate); 
            let y = d.getFullYear()
            let m = (d.getMonth() + 1)
            m = m < 10 ? ('0' + m) : m;
            let day = d.getDate() < 10 ? (`0${d.getDate()}`) : d.getDate()
            let h = d.getHours() < 10 ? (`0${d.getHours()}`) : d.getHours()
            let minute = d.getMinutes() < 10 ? (`0${d.getMinutes()}`) : d.getMinutes()
            let second = d.getSeconds() < 10 ? (`0${d.getSeconds()}`) : d.getSeconds()
    
    
            d = `${ y }-${ m }-${ day } ${ h }:${ minute }:${second}`
    
            return d;
        }
    


    还是让后端给时间戳吧……就没这些坑了

    原因:

    一种说法:安卓会把这个带T字母的时间看做UTC时间格式,(包括ios打包后也会相差8个小时)与北京时间相差8个小时。你要将UTC时间转化为北京时间然后进行格式化。GMT +0800 已经是加了8个小时的了。


    另一种说法:Android和iOS在日期格式上的处理方式有所不同,这个不同也影响到小程序的相关日期时间函数。因为iOS只支持2020/01/01 这种日期格式,不支持2020-01-01这样的格式,而现在很多后端处理日期的格式是2020-01-01,发送过来的,或者自己小程序前端生成的也是这种格式,new Date()就会出现兼容性问题。

    参考博客:https://blog.csdn.net/namechenfl/article/details/90241952

    https://developers.weixin.qq.com/community/develop/article/doc/000e2e82d14cd80838c9cb8b552013

    2020-06-18
    有用 4
    回复 2
    • Una_🕊
      Una_🕊
      2020-06-18
      厉害了
      2020-06-18
      回复
    • 言葉
      言葉
      发表于移动端
      2020-06-18
      很完美
      2020-06-18
      回复
  • 李仲伟
    李仲伟
    2020-04-14
    function changeDateFormat(cellval) {
    	//alert(cellval);
    	var dateVal = cellval + "";
    	if (cellval != null) {
    		dateVal = dateVal.replace("T"," ").replace("Z","").replace(".000","");
    		//alert(dateVal);
    		var date = new Date(dateVal);
    		
    		date = new Date(date.setHours(date.getHours()+8));
    		var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    		var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    		
    		
    		var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    		var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    		var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    		
    		return date.getFullYear() + "-" + month + "-" + currentDate + " " + hours + ":" + minutes + ":" + seconds;
    	}
    }
    
    


    2020-04-14
    有用 1
    回复 1
    • 楠栅
      楠栅
      2020-04-14
      我也是将时间格式换了就对了   但是具体不清楚
      2020-04-14
      回复
  • Wang
    Wang
    2020-04-14

    应该是时区问题吧

    2020-04-14
    有用 1
    回复 1
    • 楠栅
      楠栅
      2020-04-14
      不是
      2020-04-14
      回复
  • 灵芝
    灵芝
    2020-04-11

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2020-04-11
    有用
    回复 4
    • 楠栅
      楠栅
      2020-04-11
      测试出来是苹果8  14  和苹果6  13  new Date()带‘’—‘’的时间出来不一样
      2020-04-11
      回复
    • 楠栅
      楠栅
      2020-04-11回复楠栅
      请问这是什么问题
      2020-04-11
      回复
    • 灵芝
      灵芝
      2020-04-12回复楠栅
      是什么意思?还请提供上述信息看下
      2020-04-12
      回复
    • 楠栅
      楠栅
      2020-04-13回复灵芝
      https://developers.weixin.qq.com/s/SexHszmJ7mgg
      2020-04-13
      回复
登录 后发表内容
问题标签