55 votes

Comment puis-je découvrir le trimestre d'une date donnée

Voici les trimestres d'un exercice

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

Si le mois d'une date d'entrée se situe comme ci-dessus, j'ai besoin de la sortie en termes de numéro de trimestre.

Par exemple,

Si je donne une date d'entrée (disons le 2 janvier ), j'ai besoin de la sortie sous la forme Q4 .

Si je donne l'entrée comme ( 5 juin ), la sortie devrait donner Q1 .

En fonction de la date d'entrée, j'ai besoin du numéro du trimestre.

32voto

Haris Hasan Points 17497

Vous pouvez simplement écrire une méthode d'extension dans DateTime

 public static int GetQuarter(this 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;
}

et l'utiliser comme

 DateTime dt = DateTime.Now;
dt.GetQuarter();

22voto

Code Guru Points 263

Le moyen le plus simple et le plus cohérent d'y parvenir :


Ordinaire

 Math.Ceiling(date.Month / 3.0)

Fiscal (juste décalé avec un mod de 2+1 trimestres)

 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

Le résultat est une valeur comprise entre 1 et 4. Presque tous les environnements ont une fonction CEIL, cela devrait donc également fonctionner sur n'importe quel langage.

19voto

Dominik Points 2259

C'est pour "l'année normale". Je pense que vous pouvez adapter l'exemple:

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

13voto

Max Kilovatiy Points 599
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];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X