Ich möchte die Angular UI Datepicker auf zwei Daten beschränken, die als Variablen übergeben werden. Am liebsten würde ich es funktionieren lassen, ohne eine Bibliothek wie momentjs hinzuzufügen, da dies das einzige Feld ist, in dem ich mit Daten arbeiten muss. HierAngularUI Datepicker deaktiviert Daten außerhalb des Bereichs
ist ein Plunker dieses Problem:
http://plnkr.co/edit/zsjpoVZtHqJLIP2RW6vm?p=preview
hier sind die Variablen:
mycurrentdate = '2016-04-18'
mymindate = '2016-04-01'
mymaxmonth = '2016-05-01'
mymaxdate will be calculated from mymaxmonth to be
mymaxdate = '2016-05-31'
Meine tatsächliche max Datum der am letzten Tag des mymaxmonth wird
$scope.maxDate = new Date(
$scope.mymaxmonth + (TO THE END OF THE MONTH)
);
Eine Sache zu beachten ist, dass es durchläuftgibt ein Datum zurück, das der Tag vor dem angegebenen Datum ist. Zum Beispiel:
$scope.minDate = new Date(
$scope.mymindate
);
$ scope.minDate kehrt Wed Mar 30 2016 17:00:00 GMT-0700 (PDT)
sah ich den Grund auf, warum es gibt 30. März statt 1. April und es scheint wie eine Zeitzone Fehler entdeckt?
Ich möchte ein MyMindate von '2016-04-01' setzen und mymaxdate = '2016-05-31' und deaktivieren Sie alle Daten außerhalb dieses Bereichs. Ich habe Beginners Guide to Javascript Date and Time gelesen und es hier ausprobiert.
Im Controller habe ich:
$scope.mymindate = '2016-04-01';
$scope.mymaxmonth = '2016-05-01'; //want mymaxdate to be '2016-05-31'
$scope.minDate = new Date($scope.dt.getFullYear(), $scope.dt.getMonth(), 1);
$scope.maxDate = new Date($scope.dt.getFullYear(), $scope.dt.getMonth() + 1, 0);
In der Vorlage habe ich:
<p class="input-group">
<input type="text" class="form-control" uib-datepicker-popup="{{format}}" ng-model="dt" is-open="popup1.opened" min-date="minDate" max-date="maxDate" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</p>
"* ... scheint wie ein Zeitzonenfehler *". Kein Fehler, eine schlechte Design-Entscheidung der Autoren von ECMA-262, siehe [* Warum ist new Date() ein Tag entfernt? *] (Http://stackoverflow.com/questions/36698286/why-is-new- date-removing-a-day-javascript). Die einzige Möglichkeit, das schlechte Parsen des * Date * -Konstruktors (und * Date.parse *, sie sind äquivalent) zu vermeiden, besteht darin, das Datum manuell zu analysieren. Schreiben Sie also entweder eine Funktion (2 Zeilen Code) oder benutzen Sie eine Bibliothek. Es gibt viele kleine Parsing- und Formatierungsbibliotheken auf GitHub, oder gehen Sie auf moment.js, wenn Sie auch andere Dinge zu erledigen haben. – RobG
Ach ja, wenn du ein Date für den 31. Mai 2016 hast und einen Monat hinzufügst, bekommst du den 01. Juli 2016 (da es keinen 31. Juni gibt, rollt es auf den Juli). Datumsarithmetik ist nicht trivial und warum verwenden die meisten eine kleine (oder vielleicht große) Bibliothek für solche Dinge. – RobG
@RobG Dies ist das einzige Mal in meiner Anwendung, dass ich Daten verwenden werde. Daher würde ich es vorziehen, möglichst keine Bibliotheksabhängigkeiten hinzuzufügen. – jenryb