Comment obtenir le dernier jour d'un mois?


326

Comment trouver le dernier jour du mois en C #?

Par exemple, si j'ai la date 03/08/1980, comment puis-je obtenir le dernier jour du mois 8 (dans ce cas 31)?


2
@Mark: Pour quoi puis-je demander? Je pense que votre propre réponse ne nécessite pas de méthode d'extension.
abatishchev

4
Le dernier jour n'est pas spécifique au mois seulement, vous avez également besoin de l'année. Le dernier jour de février 2010 est le 28, mais le dernier jour de février 2008 est le 29.
Guffa

@abatishchev Il ne nécessite pas de méthode d'extension, mais la question ne le demande pas vraiment. Cependant, c'est beaucoup plus agréable et beaucoup plus lisible, du moins pour moi, d'en voir un. La méthode d'extension était plus une suggestion qu'autre chose. Toute solution fonctionnerait dans une méthode d'extension, pas seulement la mienne.
Mark

Réponses:


657

Le dernier jour du mois, vous obtenez comme ceci, qui renvoie 31:

DateTime.DaysInMonth(1980, 08);

28
public static DateTime ConvertToLastDayOfMonth (DateTime date) {return new DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } pour obtenir le dernier jour du mois dans un format de date
regisbsb

177
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);

@Henk En fait, j'ai tiré cela d'un endroit dans notre source qui crée le à DateTimepartir du lastDayOfMonth. Honnêtement, dans les deux cas, cela fonctionne parfaitement bien. C'est un argument pédant qui est le meilleur. Je l'ai fait dans les deux sens et les deux donnent la même réponse.
Mark

37

Si vous voulez la date , compte tenu d'un mois et d'un an, cela semble juste:

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}

9

Soustrayez une journée du premier du mois prochain:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1);

De plus, au cas où vous en auriez besoin pour travailler aussi en décembre:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1);

6

Vous pouvez trouver la dernière date d'un mois par ce code:

var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year, now.Month, 1);
var DaysInMonth = DateTime.DaysInMonth(now.Year, now.Month);
var lastDay = new DateTime(now.Year, now.Month, DaysInMonth);

6

Vous pouvez trouver le dernier jour du mois par une seule ligne de code:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day;

Je me demande qu'au lieu d'une méthode simple:, DateTime.DaysInMonthpourquoi quelqu'un devrait chercher cette manière illisible et complexe pour y parvenir!? - Mais comme une solution valable est acceptable;).
shA.t

5

De DateTimePicker:

Premier rendez-vous:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1);

Dernier rendez-vous:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month));

2

Pour obtenir le dernier jour d'un mois dans un calendrier spécifique - et dans une méthode d'extension -:

public static int DaysInMonthBy(this DateTime src, Calendar calendar)
{
    var year = calendar.GetYear(src);                   // year of src in your calendar
    var month = calendar.GetMonth(src);                 // month of src in your calendar
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar
    return lastDay;
}

2
// Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime(1980,8,3);
var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month));

Cette réponse ne répond qu'à l'exemple du questionneur. Une réponse plus complète serait plus utile.
Scott Lawrence

Vous pouvez utiliser la date de votre choix comme valeur d'entrée, vous pouvez donc appliquer cette solution à la date de votre choix.
Jasper Risseeuw

1
Il échouera pour certaines dates, essayez var myDate = new DateTime(1980, 1, 31);(retourne le 29)
Hans Ke st ing

Hans Keing, vous avez raison. Cette méthode échouera si le mois suivant a moins de jours que le jour actuel. Je suppose que le moyen le plus simple est d'utiliser DateTime.DaysInMonth () mais c'est la réponse acceptée, donc ma réponse doit être supprimée.
Jasper Risseeuw du

-1

Je ne connais pas C # mais, s'il s'avère qu'il n'y a pas de moyen API pratique pour l'obtenir, l'une des façons de le faire est de suivre la logique:

today -> +1 month -> set day of month to 1 -> -1 day

Bien sûr, cela suppose que vous ayez des mathématiques de date de ce type.


Ce n'est pas exact.
EJoshuaS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.