2014-04-15 3 views
11

So erhalten Sie das Startdatum und das Enddatum des Monats in verschiedenen Variablen. Ich habe dies versucht, und ich bekomme das Startdatum, aber nicht in der Lage das EnddatumWie erhalte ich das Start- und Enddatum des Datums in der Monatszeit?

DateTime startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd HH:mm:ss.fff"); 
DateTime endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(30).ToString("yyyy-MM-dd HH:mm:ss.fff"); 

Diese Logik zu finden schlägt fehl, wenn Monat Enddatum 31 und 28 oder 29. Ihre Hilfe sind sicher appretiated.

+5

Ein Monatstag beginnt immer mit "1", kann aber mit "28", "29", "30" oder "31" enden. Soweit ich weiß, wird der logischste Weg darin bestehen, einen "1" Monat zu Ihrem Startdatum hinzuzufügen und den "1" Tag damit zu subtrahieren. –

+0

Side Note: Bitte verwenden Sie keine 'DateTime.Now's in Ihrem Code, deklarieren Sie stattdessen eine Variable um sie zu speichern -' var now = DateTime.Now; '- benutzen Sie stattdessen diese Variable ([verwandte Frage] (https : //stackoverflow.com/q/29530946/4519059))) –

Antwort

32

Sie endDate wie folgt berechnen:

DateTime endDate = startDate.AddMonths(1).AddDays(-1); 
+1

@Downvoter Vorsicht, zumindest zu kommentieren? –

+2

@ SonerGönül Downvoter kann mehrere Gründe haben. Zum Beispiel kann er sagen, dass der ursprüngliche Code wegen '.ToString()' nicht kompiliert würde, so dass mein Code nicht so gut kompiliert würde. Oder irgendetwas anderes. –

14

Um First Date zu bekommen

public DateTime FirstDayOfMonth(DateTime dateTime) 
{ 
    return new DateTime(dateTime.Year, dateTime.Month, 1); 
} 

Last Date Um

public DateTime LastDayOfMonth(DateTime dateTime) 
{ 
    DateTime firstDayOfTheMonth = new DateTime(dateTime.Year, dateTime.Month, 1); 
    return firstDayOfTheMonth.AddMonths(1).AddDays(-1); 
} 
+7

Ich würde die erste Funktion in der zweiten verwenden. –

1
DateTime endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) 
         .AddMonths(1).AddDays(-1); 
1

Sie bereits den Starttermin hatte:

DateTime monthStartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); 

Es gibt eine Methode, um die Anzahl der Tage in einem Monat zu bekommen (und auf den Code IL Blick scheint es, dass auf diese Weise effizienter als die anderen Antworten ist, obwohl es sei denn, du gehst, es zu tun, um eine Milliarden Zeit, bezweifle ich, wird es keinen Unterschied sein):

int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
DateTime monthEndDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, daysInMonth); 
-2

Für erstes Datum:

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

Für letztes Datum:

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

@Downvoter .. kümmern sich um zumindest zu kommentieren? –

+0

Was ist der Unterschied Ihrer Antwort zu [diese Antwort in 2 Jahren früher] (https://stackoverflow.com/a/23077662/4519059)? –

Verwandte Themen