// // File.swift // Twear // // Created by yangbin on 2022/1/22. // import SwiftDate extension BluetoothManager { func getDateTypeAndPosition(_ menstrual: MenstrualModel, date: Date) -> (type: MenstrualDateModel, position: MenstrualRangePosition, whichDay: Int, days: Int) { var type: MenstrualDateModel = .safetyPeriod var position: MenstrualRangePosition = .none var days: Int = 0 var whichDay: Int = 0 var differDays: Int = (date - menstrual.lastDate!.dateAtStartOf(.day)).in(.day) ?? 0 differDays = differDays%menstrual.cycle var intervalDays = 0 if differDays < 0 { intervalDays = menstrual.cycle + differDays } else { intervalDays = differDays } if intervalDays < menstrual.days { //月经 whichDay = intervalDays+1 days = menstrual.days if date.isInFuture { type = .predict } else { type = .menstrualPeriod if menstrual.days == 1 { position = .full } else { if intervalDays == 0 { if date.isToday { position = .full } else if date.day == date.monthDays || date.weekday == 7 { position = .full } else { position = .left } } else if intervalDays == menstrual.days-1 { if date.day == 1 || date.weekday == 1 { position = .full } else { position = .right } } else { if date.day == date.monthDays || date.weekday == 7 { position = .right } else if date.day == 1 || date.weekday == 1 { position = .left } else { position = .middle } } } } } else if intervalDays > menstrual.cycle - 10 { //安全期 whichDay = intervalDays-menstrual.cycle+10 type = .safetyPeriod days = 9 } else if intervalDays > menstrual.cycle - 20 { //易孕期 whichDay = intervalDays-menstrual.cycle+20 days = min(menstrual.cycle-9-menstrual.days, 10) type = .fertilePeriod // if menstrual.cycle-19 == menstrual.cycle-10 { // cell.type = .ovulationDay // } if date.day == date.monthDays && date.weekday == 1 { position = .full } else if date.day == 1 && date.weekday == 7 { position = .full } else if intervalDays == menstrual.cycle-10 { //最后一天 if date.day == 1 || date.weekday == 1 { position = .full } else { position = .right } } else if intervalDays == menstrual.cycle-19 { //第一天 if date.day == date.monthDays || date.weekday == 7 { position = .full } else { position = .left } } else { if intervalDays == menstrual.cycle-14 { type = .ovulationDay } if date.day == date.monthDays || date.weekday == 7 { position = .right } else if date.day == 1 || date.weekday == 1 { position = .left } else { position = .middle } } } else { //安全期 whichDay = intervalDays-menstrual.days+1 days = menstrual.cycle-19-menstrual.days type = .safetyPeriod } return (type, position, whichDay, days) } }