Подтвердить что ты не робот

Как узнать четверть данной даты

Ниже приведены кварталы за финансовый год.

April to June          - Q1
July to Sep            - Q2
Oct to Dec             - Q3
Jan to March           - Q4

Если месяц входной даты лежит, как указано выше, мне нужен вывод в терминах номера четверти.

Например,

Если я даю входную дату (скажем январь 2), мне нужен вывод как Q4.

Если я укажу ввод как (июнь 5), вывод должен дать Q1.

На основе даты ввода мне нужен номер четверти.

4b9b3361

Ответ 1

Вы можете просто написать метод

public static int GetQuarter(DateTime date)
{
    if (date.Month >= 4 && date.Month <= 6)
        return 1;
    else if (date.Month >= 7 && date.Month <= 9)
        return 2;
    else if (date.Month >= 10 && date.Month <= 12)
        return 3;
    else 
        return 4;
}

Ответ 2

Если вы предпочитаете короткие и сжатые решения без разветвлений и массивов, вот мое предпочтительное решение.

Обычный квартал:

public static int GetQuarter(this DateTime date)
{
    return (date.Month + 2)/3;
}

Финансовый год квартал:

public static int GetFinancialQuarter(this DateTime date)
{
    return (date.AddMonths(3).Month + 2)/3;
}

Целочисленное деление будет усекать десятичные числа, давая вам целочисленный результат. Поместите методы в статический класс, и у вас будет метод расширения, который будет использоваться следующим образом:

date.GetQuarter()
date.GetFinancialQuarter()

Ответ 3

Это для "нормального года", я думаю, вы можете адаптировать образец

String.Format( "Q {0}", (date.Month + 2)/3);

Ответ 4

public static int GetQuarter(DateTime date)
    {
        int[] quarters = new int[] { 4,4,4,1,1,1,2,2,2,3,3,3 };
        return quarters[date.Month-1];
    }

Ответ 5

Метод расширения и меньшие сравнения:

public static class DateTimeExtension
{
    public static int GetQuarter(this DateTime dateTime)
    {
        if (dateTime.Month <= 3)
            return 1;

        if (dateTime.Month <= 6)
            return 2;

        if (dateTime.Month <= 9)
            return 3;

        return 4;
    }
}

Ответ 6

int CurrentQuarter = (int)Math.Floor(((decimal)DateTime.Today.Month + 2) / 3);

или измените DateTime.Today на требуемую дату.

Ответ 7

в sql, просто

((((month(@mydate)-1)/3)+3) % 4) + 1

проверьте это следующим образом:

declare @mydate datetime
set @mydate = '2011-01-01'
while @mydate <= '2011-12-31'
    begin
    print ((((month(@mydate)-1)/3)+3) % 4) + 1
    set @mydate = dateadd(month, 1, @mydate)
    end

Или, если вы хотите сделать это в .net, ему нравится

String.Format("Q{0}", ((((date.Month-1)/3)+3) % 4) + 1);

Ответ 8

Самый простой и последовательный способ достижения этого:


Обычный

Math.Ceiling(date.Month / 3.0)

Финансовый (только сдвинутый с модом на 2 + 1 квартал)

Math.Ceiling(date.Month / 3.0 + 2) % 4 + 1

01.01.2016 00:00:00 -> Q1 -> FQ4
01.02.2016 00:00:00 -> Q1 -> FQ4
01.03.2016 00:00:00 -> Q1 -> FQ4
01.04.2016 00:00:00 -> Q2 -> FQ1
01.05.2016 00:00:00 -> Q2 -> FQ1
01.06.2016 00:00:00 -> Q2 -> FQ1
01.07.2016 00:00:00 -> Q3 -> FQ2
01.08.2016 00:00:00 -> Q3 -> FQ2
01.09.2016 00:00:00 -> Q3 -> FQ2
01.10.2016 00:00:00 -> Q4 -> FQ3
01.11.2016 00:00:00 -> Q4 -> FQ3
01.12.2016 00:00:00 -> Q4 -> FQ3

Результат - это значение от 1 до 4. Почти любая среда имеет функцию CEIL, поэтому это должно работать и на любом языке.

Ответ 9

Вы можете просто сделать это:

for (int i = 1; i <= 12; i++) { 
    Console.WriteLine("Month {0} - Q{1}", i, Math.Ceiling((i <= 3 ? 12 - i + 1 : i - 3) / 3M));
}

Выход будет: введите описание изображения здесь

Ответ 10

Этот метод позволяет указать начальный месяц квартала, а также указать год за период в целом.

    public string GetQuarterPeriod(DateTime date, int quarterStartMonth)
    {
        var quarterDateOffset = date.AddMonths(1 - quarterStartMonth);
        return $"Q{Math.Ceiling((decimal)quarterDateOffset.Month / 3)} {quarterDateOffset.Year}" 
               + (quarterStartMonth == 1 ? "" : $"/{quarterDateOffset.Year + 1}");
    }

Дарение:

GetQuarterPeriod(new DateTime(2018, 4, 1), 4) -> "Q1 2018/2019"
GetQuarterPeriod(new DateTime(2018, 1, 1), 1) -> "Q1 2018"

Функция объясняет тот факт, что если месяц - январь (1), он ограничен одним годом.