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)?

Or
la source
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);
Oskar Kjellin
la source
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);
marque
la source
@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));
}
en dépit
la source
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);
Radu094
la source
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);
purée
la source
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;
jithin
la source
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));
Md. Shafiqur Rahman
la source
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;
}
shA.t
la source
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));
Jasper Risseeuw
la source
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.

RHSeeger
la source
Ce n'est pas exact.
EJoshuaS