Calculate the start-date and name of a quarter from a given date

前端 未结 8 1386
一向
一向 2020-12-23 14:07

How can I find the start-date and name (1, 2, 3, etc.) of a quarter from a given date?

相关标签:
8条回答
  • 2020-12-23 14:10
            var date = new DateTime(2015, 3, 15);
    
            var quarter = (date.Month + 2) / 3;
    
            var quarterStartMonth = 3 * quarter - 2;
    
            var quarterStartDate = new DateTime(date.Year, quarterStartMonth, 1);
    
    0 讨论(0)
  • 2020-12-23 14:10

    I think this solution would work pretty well. It takes up more line, bus is very verbose! `

    private DateTime GetFirstDayOfYearlyQuarter(DateTime value)
    {
        switch (value.Month)
        {
            case 1:
            case 2:
            case 3:
                return new DateTime(value.Year, 1, 1);
            case 4:
            case 5:
            case 6:
                return new DateTime(value.Year, 4, 1);
            case 7:
            case 8:
            case 9:
                return new DateTime(value.Year, 7, 1);
            case 10:
            case 11:
            case 12:
                return new DateTime(value.Year, 10, 1);
            default:
                throw new Exception(@"¯\_(ツ)_/¯");
        }
    }
    

    `

    P.S. This only finds first day of quarter, but you can easily extend this to find number of quarter, etc.

    0 讨论(0)
  • 2020-12-23 14:14

    https://msdn.microsoft.com/en-us/library/ms127415(v=vs.110).aspx

    using Microsoft.VisualBasic;
    var quarter = DateAndTime.DatePart(DateInterval.Quarter, (DateTime)dateTimePickerDateTime.Value);
    
    0 讨论(0)
  • 2020-12-23 14:15
    DateTime date;
    int quarterNumber = (date.Month-1)/3+1;
    DateTime firstDayOfQuarter = new DateTime(date.Year, (quarterNumber-1)*3+1,1);
    DateTime lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
    
    0 讨论(0)
  • 2020-12-23 14:24
        public static class DateTimeExtensions
    {
        public static DateTime StartOfQuarter(this DateTime _date)
        {
            var quarter = decimal.ToInt16(Math.Ceiling(_date.Month / 3.0m));
            return new DateTime(_date.Year, quarter, 1);
        }
    }
    

    use

    var quarterStart = DateTime.Today.StartOfQuarter();
    
    0 讨论(0)
  • 2020-12-23 14:32
    int GetQuarterName(DateTime myDate)
    {
        return (int)Math.Ceiling(myDate.Month / 3.0);
    }
    
    DateTime GetQuarterStartingDate(DateTime myDate)
    {
        return new DateTime(myDate.Year,(3*GetQuarterName(myDate))-2,1);
    }
    

    GetQuarterName gets the "next" integer value of the current month number / 3.

    GetQuarterStartingDate uses the output from GetQuarterName to work out the month value, the year part of the original date, and 1 to represent the first day of the month to return.

    (Apologies for making no sense, I have flu. :( )

    0 讨论(0)
提交回复
热议问题