8
votes

Créer des matrices de mois entre deux dates

J'ai l'extrait suivant que j'utilise pour obtenir les dates individuelles entre deux dates: xxx

Cependant, la section suivante xxx

n'a pas de .month pour retourner les mois à la plage de dates.

Par exemple, si je fournis le 1/1/2010 et 6/1/2010, je m'attendrais à renvoyer le 1/1/2010, 2/1/2010, 3/1/2010, 4/1 / 2010, 5/1/2010 et 6/1/2010.

Des idées?


3 commentaires

Comment un mois travaux de propriété? Comment saurait-il savoir quel mois de jours d'utilisation à utiliser? Après la soustraction, vous venez de rester avec une tempute qui est neutre de date et ne sait donc rien quels mois à utiliser.


Dupliqué possible de différence en mois


.days renvoie le nombre nombre de jours dans l'intervalle, pas les jours réels. Comment définissez-vous le fait que " un mois est compris entre 2 dates "? Le mois a au moins 1 jour dans cet intervalle? Le mois a tous les jours dans l'intervalle? De plus, comment avez-vous besoin de représenter un mois à l'aide d'un DateTime struct? - comme le 1er du mois?


4 Réponses :


0
votes

Est-ce ce que vous cherchez? L'exigence est très ambiguë.

DateTime[] calendarMonthBoundaries = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
    .Select(offset => startDate.AddDays(offset))
    .Where(date => date.Day == 1)
    .ToArray();


0 commentaires

30
votes

Essayez ceci:

static IEnumerable<DateTime> monthsBetween(DateTime d0, DateTime d1)
{
    return Enumerable.Range(0, (d1.Year - d0.Year) * 12 + (d1.Month - d0.Month + 1))
                     .Select(m => new DateTime(d0.Year, d0.Month, 1).AddMonths(m));
}


0 commentaires

1
votes

Vous pouvez énumérer des incréments de mois avec: xxx

puis appelez toarray () à ce sujet si vous voulez un tableau. Il est raisonnablement bon d'avoir des valeurs susceptibles d'être ce qui est recherché; par exemple. Si vous commencez au 31 janvier st vous obtiendrez ensuite le 28 février TH (ou 29 TH sur beigh années), puis le 31 mars > St , puis le 30 avril th et ainsi de suite.


2 commentaires

DateTime [] mois = byMonths ({30/01/2013 12:00:00 AM}, {4/04/2013 12:00:00 AM}). TOARRAY (); Cela ne renvoie que 3 mois (janvier, février, mars), avril est manquant.


@Davelucre Je ne suis pas sûr que ce n'est pas une mauvaise chose, parce que je ne suis pas sûr de ce que l'exigence de la question envisage de "entre". Il pourrait certainement être modifié d'inclure avril dans ce cas, je ne sais tout simplement pas si cela devrait.



4
votes

Depuis que j'avais juste besoin de l'année et du mois entre deux dates, j'ai modifié Lasse Espeholt répond un peu. supposer: D0 = 2012-11-03

D1 = 2013-02-05

Le résultat sera quelque chose comme ceci:

2012-11

2012 -12

2013-01

2013-02 xxx


0 commentaires