23

I am doing an activity monitor based on date which is similar to stackoverflow Today,YesterDay,this week,Last week,this month,last Month..... Based on current date how to get start-date and end-date for all these Today,YesterDay,this week,Last week,this month,last Month in c#?

3 Answers3

93
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);
Adam Robinson
  • 182,639
  • 35
  • 285
  • 343
  • 2
    Man, I hate when people catch their own mistakes that quickly. :) – MusiGenesis May 12 '10 at 17:14
  • @MusiGenesis: Haha, sorry about that! ;) – Adam Robinson May 12 '10 at 17:16
  • plz help me out http://stackoverflow.com/questions/2821358/what-is-wrong-with-this-sql-statement –  May 12 '10 at 18:10
  • var thisWeekEnd = thisWeekStart.AddDays(7).AddSeconds(-1); why you are doing like this var thisWeekEnd = thisWeekStart.AddDays(6) is enough – Lijo Nov 11 '14 at 11:50
  • @Lijo: Because these are `DateTime` objects, which means they include time. `thisWeekStart.AddDays(6)` would give you midnight the morning of Saturday. – Adam Robinson Nov 11 '14 at 15:43
  • 2
    How is this correct for thisWeekStart and thisWeekEnd - it gives Sunday 12:00:00 AM as week start and Saturday 11:59:59 PM as week end. Shouldn't it be Monday 12:00:00 AM and Sunday 11:59:59 PM ? – ivpavici Sep 03 '19 at 11:48
  • can we get start date as Monday and end date as Sunday – Developer May 25 '23 at 15:35
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

Zamir
  • 21
  • 1
0

I hope this will help:

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);
Zameer Ansari
  • 28,977
  • 24
  • 140
  • 219
  • 1
    Don't use this: DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1) - it's a typical beginner error when coding with dates - what happens when month == 1? You ends out with month == 0 – Henrik Stenbæk Oct 05 '14 at 22:41