2017-07-20 2 views
0

Hier ist das Problem: Ich habe eine Kendo.DatePicker haben, als ein Filter wirken, und es ist Standardwert, da dies festgelegt ist, in der SteuerErhalten Sie im letzten Monat in Datepicker

.Value(DateTime.Now.AddMonths(-1)) 

Und wenn wir in einem Klick " Klicken Sie auf die Schaltfläche Filter löschen. Das Datum sollte auf den Standardwert zurückgesetzt werden. Dies ist immer CurrentDate - 1 Monat.

Ich habe dies, um das aktuelle Datum zu bekommen (habe es von this question)

var todayDate = kendo.toString(kendo.parseDate(new Date()), 'dd/MM/yyyy'); 
$("#initialDate").data("kendoDatePicker").value(todayDate); 

So, wie bekomme ich die Motte, bevor mit diesem? Ich habe versucht mit getMonth und setMonth zu spielen, konnte aber nicht funktionieren.

+0

Sie müssen grundsätzlich Ihr gewünschtes Datum in JavaScript erhalten, siehe: https://stackoverflow.com/questions/26488043/javascript-get-previous-months-date –

+0

@DanDumitru Ich sah eine ähnliche Antwort, aber ich denke, ich habe verpasst ein Punkt dort. Hab den getMonth nicht schon vorher benutzt, jetzt klappt es gut :) Danke. –

Antwort

1

C# AddMonths ändert den Monat der DateTime viel das gleiche wie JavaScript setMonth tut. Wichtig ist jedoch, dass AddMonths Randfälle berücksichtigt, wie zum Beispiel das Vor- oder Zurückgehen eines Jahres oder was passiert, wenn das bestimmte Datum für diesen Monat nicht gültig ist. Zum Beispiel, wenn Sie einen Monat vom 29. März 2017 subtrahieren gab es keinen 29. Februar in diesem Jahr. Als Ergebnis muss die Datumskomponente auch auf 28 ändern. Wenn es ein Schaltjahr ist, wird es jedoch auch so sein, also müssen Sie das ebenfalls berücksichtigen.

JavaScript ist setMonth im Vergleich relativ dumm. Es ändert buchstäblich nur den Monat und lässt dann das Datum nach Bedarf überlaufen. Mit dem vorherigen Szenario, in dem Sie einen Monat vom 29. März 2017 subtrahieren, erhalten Sie mit JavaScript tatsächlich den 1. März 2017, da dieser bis zum 1. Februar ging, und dann die Datumskomponente von 29 Tagen. Seit Februar nur noch 28, geht es zurück bis März. Es ist zumindest schlau genug, um Schaltjahre zu berücksichtigen, also würden Sie in einem Jahr wie 2016 tatsächlich am 29. Februar enden.

Egal, JavaScript-Daten ziemlich viel saugen. Wenn Sie wirklich mit ihnen arbeiten möchten, würde ich vorschlagen, eine Bibliothek wie Moment.js zu verwenden, die unter anderem solche Situationen geschickt bewältigt.

Die beste Lösung besteht jedoch darin, den Standardwert von C# beizubehalten, sodass Sie sich keine Gedanken darüber machen müssen, ihn später über JavaScript zu berechnen. Zum Beispiel könnten Sie ein data-* Attribut wie hinzufügen:

.HtmlAttributes(new { data_default = DateTime.Now.AddMonths(-1) }) 

Dann können Sie einfach diesen Wert aus der Eingabe gelesen und die Steuerung auf das gesetzt, wenn es gelöscht wird.

+0

Die Februar-Ausgabe ist in meinem Fall nicht wirklich relevant, da sie zum 1. März passt, was ihrer Absicht entspricht. Ich ging für die Lösung, die @DanDumitru verknüpft, da ich möchte, dass das Datum in einer Funktion berechnet wird, jedes Mal verwendet werden, wenn jemand die Filter löschen möchte, reinigt es sie alle. –

Verwandte Themen