Ende des Monats-Berechnungen
Nur Fragen, ob jeder wissen, der eine elegante Lösung für das folgende.
Wenn ich 30 Juni 2009 und ich einen Monat ich will, dass es bis zum 31. Juli 2009, nicht 30. Juli 2009.
Diese Logik basiert auf der Tatsache, dass die 30 Juni 2009 wurde das Ende des Monats Juni und wenn ich einen Monat, den ich gehen möchte, um am Ende des nächsten Monats.
Aber wenn ich 29 Juni 2009 und ich einen Monat sollte es gehen 29. Juli 2009.
Hinweis muss ich hinzufügen kann eine beliebige Anzahl von Monaten, und ich muss berücksichtigen, Schaltjahre.
Ich weiß auch, die Logik hier ist fraglich, aber es ist ein business-Anforderung, die mit Ende des Monats-Verträge gehen auf das Ende des Monats für einen Monat in die Zukunft.
Ich dachte daran, mehrere Lösung, aber keine, die sind sehr elegant. Daher dachte ich, jemand habe einen besseren Weg.
Cheers
Anthony
- Sie widersprechen sich selbst. "Wenn ich 30 Juni 2009 und ich einen Monat, ich will Sie nicht gehen bis zum 31. Juli 2009.... wenn ich einen Monat, den ich gehen möchte, um am Ende des nächsten Monats.". Willst du damit sagen, dass Sie wollen, es zu gehen, um am Ende des Monats?
- ya ich habe gerade festgestellt, dass ich mich... 🙂
- Was sind Ihre unelegant Lösungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu überprüfen, ob ein Datum ist das Ende des Monats, überprüfen Sie, ob am nächsten Tag ist Tag, dann werden einem Monat. Ihr Algorithmus sollte dann sein, "Wenn der Tag ist nicht Ende des Monats, fügen Sie 1 Monat. Wenn es das Ende des Monats, noch einen Tag, fügen Sie einen Monat, subtrahieren einen Tag."
EDIT: ich lese deine Frage nochmal. Müssen Sie ein Häkchen setzen um zu sehen, ob seine letzten Tag des Monats.
Sorry, ich wünschte, ich hätte Lesen die Frage deutlich, was notwendig ist.
Hoffe das ist gut genug, um Ihnen eine Idee von, was erforderlich ist.
Können Sie es, indem Sie beginnend am ersten Tag des vorherigen Monats und zurück an einem Tag?
Mein Ansatz für dieses problem wäre, beginnen mit, dass Sie eine routine, die feststellt, ob ein bestimmter Tag ist der Letzte Tag des Monats (unter Berücksichtigung von Schaltjahren Februaries natürlich!)
Sie müssen auch eine routine, dass gibt Ihnen den letzten Tag eines Monats, da ein Tag in diesem Monat.
Dann, wenn Sie auf einen Tag, der Letzte Tag, noch einen Tag, und verwenden Sie die zweite routine auf, um den letzten Tag des Monats. Eine Schleife verwenden, die für mehrere Monate.
Könnten Sie implementieren eine EndOfMonth() und isEndOfMonth().
so würde der code sein, mehr oder weniger,
Ein bisschen einfach, aber Sie bekommen die Idee.
Gibt es natürlich eine Menge Ideen, die hier für die Logik der EndOFMonth und isEndOfMonth
Hier ist ein einfaches .NET C# - Lösung, die zählt auch für Schaltjahre, usw:
Können Sie die DateTime.DaysInMonth () - Methode so etwas wie die folgenden:
Wäre das dann das Komplement Funktion zu finden, wenn ich auf den Start-Monat?
DateTime.Now.AddDays(-1).Month == DateTime.Now.AddMonths(-1).Month
Wenn Sie nur EndOfMonth oder einfach AddNMonth, dann hast du doch deine Antwort schon.
Sonst, um eine vollständige generische Lösung, die Sie brauchen würde, um eine Implementierung des wiederholungsmusters, wie Sie sehen können Sie in der Benutzeroberfläche der Outlook Meeting-Benutzeroberfläche. Ich behaupte nicht, Sie zu verwenden, Outlook-Implementierung, aber es sollte ein paar .NET-Komponenten, die Sie kaufen können. Oder es selbst implementieren, aber nicht zu unterschätzen und unit-testen Sie es alle - es ist eine sehr schwierige Komponente zu implementieren.