我有一个C#类作为销售报告引擎。所以基本上它取决于数据库中的数据取决于用户选择的日期范围。C#类选择当前季度而不是上一季度的日期
用户可以按两种方式选择日期 - 按特定日期范围或按季度(即当前季度,上一季度)。
当系统移交给我们时,上一季度选项功能正常,但现在它只是获取与当前季度相同的日期(我不确定为什么,本部分的源代码没有更改完全)。
我一直在寻找它的年龄试图找出发生了什么事情,因为正如我所说,它确实在以前正常工作。我希望有一双新鲜的眼睛可以帮助吗?我通过代码进行了调试,当我选择GetPreviousQuarter时,它只计算GetCurrentQuarterDates。
下面是switch语句当用户选择按季度来查看信息被称为:
switch (reportRequest.SelectedPeriod)
{
case SalesReportRequest.SalesReportPeriod.Today: // Today
startDate = DateTime.Today;
endDate = DateTime.Today.Add(new TimeSpan(0, 23, 59, 59, 59));
break;
case SalesReportRequest.SalesReportPeriod.Yesterday:
startDate = DateTime.Today.AddDays(-1);
endDate = DateTime.Today.AddDays(-1).Add(new TimeSpan(0, 23, 59, 59, 59));
break;
case SalesReportRequest.SalesReportPeriod.Last7Days:
ReportDateRange dr3 = GetDatesOfLastSevenDays();
startDate = dr3.StartDate;
endDate = dr3.EndDate;
break;
case SalesReportRequest.SalesReportPeriod.CurrentQuarter: // Current Quarter.
ReportDateRange dr = GetDatesOfCurrentQuarter();
startDate = dr.StartDate;
endDate = dr.EndDate;
break;
case SalesReportRequest.SalesReportPeriod.PreviousQuarter: // Previous Quarter.
ReportDateRange dr1 = GetDatesOfPreviousQuarter();
startDate = dr1.StartDate;
endDate = dr1.EndDate;
break;
case SalesReportRequest.SalesReportPeriod.CurrentYear: // Current Year.
ReportDateRange dr2 = GetDatesOfCurrentYear();
startDate = dr2.StartDate;
endDate = dr2.EndDate;
break;
}
所以后来选择了上一季度的选项时,GetDatesOfPreviousQuarter()被调用:
public ReportDateRange GetDatesOfPreviousQuarter()
{
var dtmValue = DateTime.Now;
return DatesOfQuarter(dtmValue);
}
这就要求DatesOfQuarter:
public ReportDateRange DatesOfQuarter(DateTime dtmValue)
{
var intQuarter = (int)Math.Ceiling(dtmValue.Month/3M);
var intLastMonthOfQuarter = intQuarter * 3;
var intFirstMonthOfQuarter = intLastMonthOfQuarter - 2;
var intLastDayOfQuarter = DateTime.DaysInMonth(dtmValue.Year, intLastMonthOfQuarter);
ReportDateRange dateRange = new ReportDateRange
{
StartDate = new DateTime(dtmValue.Year, intFirstMonthOfQuarter, 1),
EndDate = new DateTime(dtmValue.Year, intLastMonthOfQuarter, intLastDayOfQuarter)
};
return dateRange;
}
任何帮助我很欣赏,如果需要,我可以提供更多信息。
谢谢。
编辑:
只是因为有些人问它:
public ReportDateRange GetDatesOfCurrentQuarter()
{
var dtmValue = DateTime.Now;
return DatesOfQuarter(dtmValue);
}
为'GetDatesOfPreviousQuarter'和'DatesOfQuarter'看起来都正确,以我的代码。你是否获得了最初请求的正确的'reportRequest.SelectedPeriod'? – Stuart 2011-04-04 10:30:44
是的,在这个阶段我已经将它检查了近三倍,一切都应该如此。我确实尝试了之前发布的DateTime.Now.AddMonths(-3),这似乎挑出了正确的日期。仍然没有解决它之前的工作方式的神秘感:S – 109221793 2011-04-04 10:33:45
评论删除 - 忽略我...我疯了 - 对不起!在这个代码中有一些简单的东西... – Stuart 2011-04-04 10:34:04