web-dev-qa-db-fra.com

Calculer la date de début et le nom du trimestre à partir d'une date donnée

Comment trouver la date de début et le nom (1, 2, 3, etc.) d'un trimestre à partir d'une date donnée?

36
cllpse

Quelque chose comme (non testé):

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);
101
Joe
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 obtient la "prochaine" valeur entière du numéro du mois en cours/3. 

GetQuarterStartingDate utilise la sortie de GetQuarterName pour calculer la valeur du mois, la partie année de la date d'origine et 1 pour représenter le premier jour du mois.

(Excuses pour n'avoir aucun sens, j'ai la grippe. :()

5
ZombieSheep
        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);
2
youzer

https://msdn.Microsoft.com/ru-ru/library/ms127415(v=vs.110).aspx

using Microsoft.VisualBasic;
var quarter = DateAndTime.DatePart(DateInterval.Quarter, (DateTime)dateTimePickerDateTime.Value);
2
anonymous

Je pense que cette solution fonctionnerait plutôt bien. Cela prend plus de ligne, car le bus est très prolixe!

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. Cela ne trouve que le premier jour du trimestre, mais vous pouvez facilement l'étendre pour trouver le numéro du trimestre, etc.

0
Ignas

Deux lignes plus simples avec démo en direct ici + appuyez sur F8 pour exécuter.

var date = DateTime.Now; //Give you own DateTime
int offset = 2, monthsInQtr = 3;

var quarter = (date.Month + offset) / monthsInQtr; //To find which quarter 
var totalMonths = quarter * monthsInQtr;

var startDateInQtr = new DateTime(date.Year, totalMonths - offset, 1); //start date in quarter 

Si vous regardez dernier jour du trimestre, utilisez DateTime.DaysInMonth

var endDateInQtr = new DateTime(date.Year, totalMonths, DateTime.DaysInMonth(date.Year, totalMonths));
0
super cool