2016-07-13 1 views
-6

Ich brauche eine Hilfe, um den sechsmonatigen Bereich vom aktuellen Datum zu erhalten. Zum Beispiel, wenn das aktuelle Datum 02-Feb-2016 ist, dann möchte ich Startdatum 01-Sep-2015 und ein Enddatum 29-Feb-2016.Wie erhalte ich einen genauen Zeitraum von 6 Monaten?

ich den Code versucht:

DateTime date = new DateTime(2016,02,06); 
DateTime endDate = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1); 
DateTime startDate = endDate.AddMonths(-6); 

und Ausgangs ist:

Startdate: 29-Aug-2015 endDate: 29-Feb-2016 

Aber ich möchte die folgende Ausgabe:

Startdate: 01-Sep-2015 endDate: 29-Feb-2016 

Update:

Ich habe die Frage mit einem Exempel aktualisiert Das habe ich ausprobiert und ausgegeben.

juharrs Kommentar ist die Arbeit für mich.

+2

Warum in aller Welt würde 'DateTime.AddMonths()' _subtract_ days, es sei denn, Sie gaben ihm einen negativen Wert? Zeigen Sie uns bitte Ihren Code und die Ausgabe, die Sie erhalten. –

+3

Keines dieser Daten in dem von Ihnen erwarteten Bereich scheint etwas mit dem aktuellen Datum zu tun zu haben, wie Sie es nennen. Kannst du erklären, was du wirklich willst? Meinst du aktuellen Monat statt Datum? – itsme86

+2

Die 6-Monats-Regel ist nicht klar. Meinst du die 6 Monate enden am Ende des aktuellen Monats, oder hast du eine bestimmte 6-Monats-Frist definiert (immer September-Feb-Sept)? – Rhumborl

Antwort

1

juharr Kommentar als Antwort bewegen, wie es richtig ist,

einfach ändern:

DateTime startDate = endDate.AddMonths(-6); 

bis

DateTime startDate = new DateTime(date.Year, date.Month, 1).AddMonths(-5); 
-1

Erstens sind 180 Tage nicht genau sechs Monate. Es sieht so aus, als ob du -3 Monate und +3 Monate brauchst. Dies gibt Ihnen einen sechsmonatigen Ausbruch.

Monate:

var dat = new DateTime(2016, 01, 01); 
var startdat = dat.AddMonths(-3); 
var enddat = dat.AddMonths(3); 

jedoch, wenn Sie wirklich 180 Tage ....

meinte

Seit Tagen:

var dat = new DateTime(2016, 01, 01); 
var startdat = dat.AddDays(-90); 
var enddat = dat.AddDays(90); 

Jetzt haben Sie die zwei Tage, die Sie benötigen.

UPDATE 1: Wenn Sie nur -6 Monate benötigen, hat Ihre Funktion funktioniert, aber wie ich bereits erwähnt, -180 Tage ist nicht das Gleiche wie -6 Monate.

Sie können immer noch die AddDays(-180) verwenden, wenn Sie 180 Tage möchten, oder AddMonths(-6) für 6 Monate zurück.

+5

" Es sieht so aus als ob Sie -3 Monate und +3 Monate brauchen "- Wie siehst du das? Op gab das Datum "02-Feb-2016" und erwartete, dass er vom 01. September 2015 bis zum 29. Februar 2016 zurückkam. – Rotem

+0

Seine Frage lautete: "Ich brauche eine sechsmonatige Reichweite". Darauf habe ich geantwortet. Ich habe den anderen Teil nicht gesehen. – arcee123

0

Basierend auf dem Beispiel in Ihrer Frage sollte dies für Sie arbeiten:

DateTime end = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, 1).AddDays(-1); 
DateTime start = end.AddMonths(-6); 
+3

oder 'var end = neue DateTime (DateTime.Now.Year, DateTime.Now.Month, 1) .AddMonth (1) .AddDay (-1);' Auch der 'start' wird der letzte Tag von sein der Monat anstelle des ersten, also statt 'var start = new DateTime (DateTime.Now.Year, DataTime.Now.Month, 1) .AddMonths (-5) '. – juharr