根据c#中的天数获取月数

时间:2011-07-28 22:11:07

标签: c# asp.net date criteria

我一直试图想出这个......

我们目前在报告中有一个日期标准,受天数限制,当然可配置,目前设置为90天..消息说,它受限于90天,但是我的老板想要将其增加到13个月,不幸的是,如果我这样做,我需要做几天,它会说,395天..

不是一个非常友好的信息..

试图找到满足这个要求的方法,我唯一的另一个选择是添加受月数和天数限制的其他设置。但是我仍然需要将这几个月转换回不完美的日子,因为不是每个月都有相同的日子。

想法?

4 个答案:

答案 0 :(得分:3)

您需要决定是否要使用13个月作为时间间隔,或者使用接近13个月的某些天数。如果您使用13个月,那么天数(或报告的结束日期)将根据开始日期而有所不同。

我建议您将报告配置为数月或数天(不仅存储数字,还存储配置中的单位)。然后,您可以在报告中显示配置中指定的任何内容(也包括配置中的单位),并通过将配置的已配置单元数添加到开始日期来计算查询的结束日期。

如果你试着在几天内完成所有事情,那么当你现在几个月都在工作时,你只会让自己生活困难。

在开始日期添加13个月以获得结束日期要比在特定天数内尝试和(不准确)计算多少个月要容易得多。

答案 1 :(得分:1)

使用TimeSpan object执行日期条件所需的计算。

答案 2 :(得分:0)

考虑到天数,我会做这样的事情:

int myDays;   // 390 or whatever
DateTime d1 = DateTime.Now;
DateTime d2 = d1.AddDays(myDays);
int monthsDiff = d2.Month - d1.Month + 12 * (d2.Year - d1.Year);
DateTime d3 = d1.AddMonths(monthsDiff);
TimeSpan tf = d2 - d3;
string msg = monthsDiff.ToString() + " months, " + tf.Days + " days";

答案 3 :(得分:0)

TimeSpan为您提供两个DateTime个对象之间的持续时间。它可以在几天,几小时或几分钟内保持一致;根据实际开始和月份,月数会有所不同。结束日期,因为不同的月份有不同的实际天数。

话虽如此,您总是可以编写一个实用程序方法,根据您的日历和StartDate / EndDates为您提供YourTimeSpan对象,该对象可以为您提供月数等。

在您的情况下,您可以通过将其单独存储在配置中来使其更简单,例如 - ReportDuration_YearsReportDuration_MonthsReportDuration_Days。这样您就可以在报表上创建有意义的标签,并允许正确识别StartDate和EndDate。

//Call this by passing values from configuration
private string GetNiceLookingLable(int? years, int? months, int? days){
    var yearMessage = (years.HasValue)?String.Format("{0} Years", years):String.Empty;
    var monthMessage = (months.HasValue)?String.Format("{0} Months", months):String.Empty;
    var daysMessage = (days.HasValue)?String.Format("{0} Days", days):String.Empty;

    // You probably want to concatenate them properly
    return String.Format("{0} {1} {2}",yearMessage, monthMessage, daysMessage);
}

-

//Call this to get starting date
private DateTime getStartingDate(int? years, int? months,int? days){
     var retDate = DateTime.Today;
     if(years.HasValue){
         retDate = retDate.AddYears(-1*years.Value);
     }
     if(months.HasValue){
         retDate = retDate.AddMonths(-1*months.Value);
     }
     if(days.HasValue){
         retDate = retDate.AddDays(-1*days.Value);
     }

     return retDate;
}