当我尝试准确接收一个月的假期时,我会使用计算器。
当我预订一个洞日时,这非常有效。但是,如果我想要一个小时或只是1/2,它“不工作”它显示为一整天。
如何让我的计算更精确?
public double[] GetMonthReport(int year)
{
double[] yearMonths = new double[13];
if (this.HtVacationDays.Any())
{
}
{
foreach (ZvVacationDay vacationDay in this.ZvVacationDay)
{
foreach (DateTime vacationDayDate in vacationDay.GetDates())
{
if (vacationDayDate.Year == year)
{
yearMonths[vacationDayDate.Month] += 1;
}
}
}
}
return yearMonths;
}
在我的ZvVacationDay中,我有FromDate(datetime)和ToDate(datetime)以及标题为varchar等...
以下是我在db中的数据示例。现在是一整天的假期
FromDate 2009-08-17 08:00:00:000 ToDate 2009-08-17 16:00:00:000
感谢您的帮助和快速解答!
答案 0 :(得分:0)
你需要知道他们起飞的时间。
您可以将休息时间设置为休息时间/休息日,以便您的迭代变为
foreach(TimeSpan vacationTimeOff in vacationDay.GetTimeOff())
或者拥有RAHalfVacationDays
并对其进行迭代。
只要您将部分日作为数据源,就会变得微不足道
yearMonths[vacationDayDate.Month] += timeOff;
答案 1 :(得分:0)
伪代码将是:
if (vacationDayDate.Year == year)
{
if({isHalfDay})
yearMonths[vacationDayDate.Month] += 0.5;
else // is full day
yearMonths[vacationDayDate.Month]++;
}
或者更简洁:
if (vacationDayDate.Year == year)
{
yearMonths[vacationDayDate.Month] += {isHalfDay} ? 0.5 : 1.0;
}