public static double CalculateTarget(int month, DateTime?onboardDate, DateTime?offboardDate, double target) { double calculatedTarget = 0d; DateTime date = DateTimeUtility.GetDate(month); int currentMonth = date.Month; int currentYear = date.Year; int MonthlyDays = DateTime.DaysInMonth(currentYear, currentMonth); int startDay = 1; int endDay = MonthlyDays; //如果入职日期在12号之前,指标按日历数比例计算 if (onboardDate != null && onboardDate.Value.Month == currentMonth && onboardDate.Value.Year == currentYear && onboardDate.Value.Day < 12) { startDay = onboardDate.Value.Day; } //如果入职日期之前的月份,或者在12号之后,指标为0 if ((onboardDate != null && onboardDate.Value.Month > currentMonth && onboardDate.Value.Year >= currentYear) || (onboardDate != null && onboardDate.Value.Month == currentMonth && onboardDate.Value.Year == currentYear && onboardDate.Value.Day >= 12)) { startDay = endDay + 1; } //if(offboardDate != null && offboardDate.Value.Month == currentMonth && onboardDate.Value.Year == currentYear) //{ // endDay = offboardDate.Value.Day; //} calculatedTarget = target * (endDay - startDay + 1) / (MonthlyDays); return(calculatedTarget); }