【问题标题】:c# get start-date and last-date based on current datec# 根据当前日期获取开始日期和最后日期
【发布时间】:2010-05-12 17:03:09
【问题描述】:

我正在做一个基于日期的活动监视器,类似于stackoverflow Today,YesterDay,this week,Last week,this month,last Month.....基于当前日期如何在c#中为所有这些Today,YesterDay,this week,Last week,this month,last Month获取start-dateend-date

【问题讨论】:

    标签: c# datetime


    【解决方案1】:
    DateTime baseDate = DateTime.Today;
    
    var today = baseDate;
    var yesterday = baseDate.AddDays(-1);
    var thisWeekStart = baseDate.AddDays(-(int)baseDate.DayOfWeek);
    var thisWeekEnd = thisWeekStart.AddDays(7).AddSeconds(-1);
    var lastWeekStart = thisWeekStart.AddDays(-7);
    var lastWeekEnd = thisWeekStart.AddSeconds(-1);
    var thisMonthStart = baseDate.AddDays(1 - baseDate.Day);
    var thisMonthEnd = thisMonthStart.AddMonths(1).AddSeconds(-1);
    var lastMonthStart = thisMonthStart.AddMonths(-1);
    var lastMonthEnd = thisMonthStart.AddSeconds(-1);
    

    【讨论】:

    • 伙计,我讨厌人们这么快就发现自己的错误。 :)
    • @MusiGenesis:哈哈,对不起! ;)
    • var thisWeekEnd = thisWeekStart.AddDays(7).AddSeconds(-1);为什么你这样做 var thisWeekEnd = thisWeekStart.AddDays(6) 就足够了
    • thisWeekStart 和 thisWeekEnd 的正确性如何 - 它将周日 12:00:00 AM 作为一周的开始,将周六 11:59:59 PM 作为周末。不应该是周一上午 12:00:00 和周日晚上 11:59:59 吗?
    【解决方案2】:
    public enum FrequencyType
    {
    None = 0,
    Daily = 1,
    Weekly = 2,
    Monthly = 3,
    Quarterly = 4,
    Annually = 5,
    }
    
    
    private string[] GetRange(FrequencyType frequency, DateTime dateToCheck)
    {
    string[] result = new string [2];
    DateTime dateRangeBegin = dateToCheck;
    TimeSpan duration = new TimeSpan(0, 0, 0, 0); //One day 
    DateTime dateRangeEnd = DateTime.Today.Add(duration);
    
    switch (frequency)
    {
        case FrequencyType.Daily:
            dateRangeBegin = dateToCheck;
            dateRangeEnd = dateRangeBegin;
            break;
    
        case FrequencyType.Weekly:
            dateRangeBegin = dateToCheck.AddDays(-(int)dateToCheck.DayOfWeek);
            dateRangeEnd = dateToCheck.AddDays(6 - (int)dateToCheck.DayOfWeek);
            break;
    
        case FrequencyType.Monthly:
            duration = new TimeSpan(DateTime.DaysInMonth ( dateToCheck.Year, dateToCheck.Month) - 1 , 0, 0, 0);
            dateRangeBegin = dateToCheck.AddDays((-1) * dateToCheck.Day + 1);
            dateRangeEnd = dateRangeBegin.Add(duration); 
            break;
    
        case FrequencyType.Quarterly:
            int currentQuater = (dateToCheck.Date.Month - 1) / 3 + 1;
            int daysInLastMonthOfQuarter = DateTime.DaysInMonth(dateToCheck.Year, 3 * currentQuater );
            dateRangeBegin = new DateTime ( dateToCheck.Year, 3 * currentQuater - 2, 1);
            dateRangeEnd = new DateTime(dateToCheck.Year, 3 * currentQuater ,  daysInLastMonthOfQuarter);
            break;
    
        case FrequencyType.Annually:
           dateRangeBegin = new DateTime(dateToCheck.Year, 1, 1);
           dateRangeEnd = new DateTime(dateToCheck.Year, 12, 31); 
           break;
    }
    result[0] = dateRangeBegin.Date.ToString();
    result[1] = dateRangeEnd.Date.ToString();
    return result; 
    }
    

    http://zamirsblog.blogspot.com/2010/02/find-first-and-last-date-of-given-week.html

    【讨论】:

      【解决方案3】:

      我希望这会有所帮助:

      var begindate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("MM/dd/yyyy");
      Console.WriteLine("FIRST DAY OF THE CURRENT MONTH (begindate): " + begindate);
      
      var enddate=DateTime.Now.ToString("MM/dd/yyyy");
      Console.WriteLine("TODAY'S DATE (enddate): " + enddate);
      
      var comparebegindate = new DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1).ToString("MM/dd/yyyy");
      Console.WriteLine("FIRST DAY OF THE LAST MONTH (comparebegindate): " + comparebegindate);
      
      var comparedate = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, DateTime.Now.Day).ToString("MM/dd/yyyy");
      Console.WriteLine("TODAY'S DATE WITH LAST MONTH (comparedate): " + comparedate);
      
      var compareenddate = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)).ToString("MM/dd/yyyy");
      Console.WriteLine("LAST MONTH'S LAST DATE (compareenddate): " + compareenddate);
      

      【讨论】:

      • 不要使用这个:DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1) - 使用日期编码时这是一个典型的初学者错误 - 当月份 == 1 时会发生什么?你以月份结束== 0
      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多