收藏
回答

同样的代码... 远程调试IOS上没问题。直接扫描进入确不行...

//全部时间的月份都是按0~11基准,显示月份才+1

let dateArr = [];           //需要遍历的日历数组数据

let arrLen = 0;             //dateArr的数组长度

let now = setYear ? new Date(setYear, setMonth) : new Date();

let year = setYear || now.getFullYear();

let nextYear = 0;

let month = setMonth || now.getMonth();         //没有+1方便后面计算当月总天数

let nextMonth = (month + 1) > 11 ? 1 : (month + 1);

let ss = year + ',' + (month + 1) + ',' + 1;

console.log(ss);

if(this.data.isIOS){

ss = ss.replace(/-/g, '/');

}

console.log(ss);

let startWeek = new Date(ss).getDay();              //目标月1号对应的星期

let dayNums = new Date(year, nextMonth, 0).getDate();       //获取目标月有多少天

let obj = {};

let num = 0;

let laseMothYear = year;//上个月份所属年份

let laseMoth = (month - 1) < 0 ? 11 : month - 1;//上个月份,由当月-1得出,若小于0则为上一年11月

let laseMothdayNums = new Date(laseMothYear, laseMoth, 0).getDate();

if (month - 1 < 0) {//上个月份,由当月-1得出,若小于0则为上一年11月

laseMothYear=year-1;

laseMothdayNums = new Date(laseMothYear, laseMoth, 0).getDate();//上个月份天数

}

if (month + 1 > 11) {

nextYear = year + 1;

dayNums = new Date(nextYear, nextMonth, 0).getDate();

}

arrLen = startWeek + dayNums;

let iMonthleng = startWeek + dayNums;//除去下个月份的集合长度

let yu = arrLen % 7;

if (yu!=0){

arrLen = startWeek + dayNums + 7 - yu;

}

for (let i = 0; i < iMonthleng; i++) {

if (i >= startWeek) {//当月天数

num = i - startWeek + 1;

obj = {

isToday: '' + year + (month + 1) + num,

dateNum: num,

}

} else {// 上个月的天数

obj = {

isToday: '' + laseMothYear + (laseMoth + 1) + laseMothdayNums - startWeek + i + 1,

isToMonth:0,

dateNum: laseMothdayNums-startWeek+i+1,//上个月天数数字

};

}

dateArr[i] = obj;

}

if(yu!=0){//下个月天数 因为总是从1开始所以直接循环增加

let daynumber=1;

for (let i = iMonthleng; i < arrLen;i++) {

obj = {

isToday: '' + laseMothYear + (laseMoth + 1) + laseMothdayNums - startWeek + i + 1,

isToMonth: 0,//该天数是否属于当月

dateNum: daynumber,

};

dateArr[i] = obj;

daynumber++;

}

}

this.setData({

dateArr: dateArr

})


let nowDate = new Date();

let nowYear = nowDate.getFullYear();

let nowMonth = nowDate.getMonth() + 1;

let nowWeek = nowDate.getDay();

let getYear = setYear || nowYear;

let getMonth = setMonth >= 0 ? (setMonth + 1) : nowMonth;


if (nowYear == getYear && nowMonth == getMonth) {

this.setData({

isTodayWeek: true,

todayIndex: nowWeek

})

} else {

this.setData({

isTodayWeek: false,

todayIndex: -1

})

}


以上代码...

最后一次编辑于  2018-09-07  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • HS
    HS
    2018-09-07

    iOS 上 Date 构造器与其他环境有所不同,建议打印一下各个 new Date 出来的对象,看看是否符合您的预期。

    2018-09-07
    赞同 11
    回复 3
    • 郑昌正欧拉欧拉欧拉欧拉欧拉
      郑昌正欧拉欧拉欧拉欧拉欧拉
      2018-09-07

      但是远程调试,可以运行。远程调试和扫描二维码进去有差别吗

      2018-09-07
      赞同
      回复
    • HS
      HS
      2018-09-07回复郑昌正欧拉欧拉欧拉欧拉欧拉

      有一定的区别,建议在远程调试的 console 和 vConsole 测一下以验证

      2018-09-07
      赞同
      回复
    • 郑昌正欧拉欧拉欧拉欧拉欧拉
      郑昌正欧拉欧拉欧拉欧拉欧拉
      2018-09-07回复HS

      好的。

      2018-09-07
      赞同
      回复
  • 郑昌正欧拉欧拉欧拉欧拉欧拉
    郑昌正欧拉欧拉欧拉欧拉欧拉
    2018-09-07

    代码是日历控件的JS代码。创建日期集合用的

    2018-09-07
    赞同
    回复