function avgPeroid(userInfo, diariesJsonStr){ var avgResult = avgPeroidCalculate(userInfo, diariesJsonStr); android_mc.callback(avgResult); } function avgPeroidCalculate(userInfo, diariesJsonStr){ userInfo = eval('(' + userInfo + ')'); diariesJsonStr = eval(diariesJsonStr); var JsonLength = diariesJsonStr.length; var dateTime = []; if(JsonLength >= 19){ if(diariesJsonStr[0].is_menstruation_began == false){ if(duibi(diariesJsonStr[19].date)){ for(var i = 0 ; i <=19 ;i++){ if((i%2==0 && diariesJsonStr[i].is_menstruation_finished==false) || (i%2==1 && diariesJsonStr[i].is_menstruation_began==false)){ return -1; } if(i%2==1 && diariesJsonStr[i].is_menstruation_began==true){ dateTime.push(diariesJsonStr[i].date); if(dateTime.length==10){ break; } } } }else{ return -2; } }else if(diariesJsonStr[0].is_menstruation_began == true){ if(duibi(diariesJsonStr[18].date)){ for(var i = 0 ; i <=18 ;i++){ if((i%2==0 && diariesJsonStr[i].is_menstruation_finished==true) || (i%2==1 && diariesJsonStr[i].is_menstruation_began==true)){ return -1; } if(i%2==0 && diariesJsonStr[i].is_menstruation_began==true){ dateTime.push(diariesJsonStr[i].date); if(dateTime.length==10){ break; } } } }else{ return -2; } }else{ return -3; } }else{ return -4; } var avgPeroid = calculate(userInfo, dateTime); return avgPeroid; } function duibi(time) { var arr = time.split("-"); var starttime = new Date(parseInt(arr[0])+1, arr[1], arr[2]); var starttimes = starttime.getTime(); var nowtime = new Date(); var year = nowtime.getFullYear(); var month = nowtime.getMonth(); var date =nowtime.getDate(); var lktime = new Date(year, month, date); var lktimes = lktime.getTime(); if (starttimes >= lktimes) { return true; } else{ return false; } } function calculate(userInfo, datetime){ if(datetime.length < 10){ return 0; } var nineMenstrual = []; for(var i=1; i < 10; i++){ diff = twoDaysDiff(datetime[i], datetime[i-1]); nineMenstrual.push(diff); } var periodAvg4 = ForDight(arraySum(nineMenstrual.slice(0,4))/4, 1); sortMenstrual = nineMenstrual.sort(); var periodMidl = sortMenstrual[4]; sortMenstrual.shift(); sortMenstrual.pop(); var periodAvg7 = ForDight(arraySum(sortMenstrual)/7, 1); var condition1 = Math.abs( periodAvg4 - userInfo.menstrual_cycle ) > 5; var condition2 = Math.abs( periodMidl - userInfo.menstrual_cycle ) > 5; var condition3 = Math.abs( periodAvg7 - userInfo.menstrual_cycle ) > 5; if(condition1 && condition2 && condition3){ var period = Math.round(periodMidl); return period; } return 0; } function arraySum(arr) { var sum = 0; for (var i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } function twoDaysDiff(currDay, pervDay) { var _currDay = currDay.replace(/\-/g, "/"); var _pervDay = pervDay.replace(/\-/g, "/"); var pervDay = new Date(_pervDay); var currDay = new Date(_currDay); diff = parseInt((pervDay.getTime() - currDay.getTime()) / parseInt(1000 * 3600 * 24)); return diff; } function ForDight(Dight,How){ Dight = Math.round(Dight*Math.pow(10,How))/Math.pow(10,How); return Dight; }