2016-04-18 33 views
6

Açısal UI Veri Tabanı'nı değişken olarak geçirilen iki tarih arasında sınırlamak istiyorum. Tercihen, momentumlar gibi bir kütüphane eklemeden çalışmayı sağlamak istiyorum, çünkü bu tarihlerle çalışmam gereken tek alan. Burada http://plnkr.co/edit/zsjpoVZtHqJLIP2RW6vm?p=previewAngularUI Datepicker Aralık dışı tarih aralığını devre dışı bırakma

değişkenler şunlardır:: İşte

bu sorunun bir plunker olan

mycurrentdate = '2016-04-18' 
mymindate = '2016-04-01' 
mymaxmonth = '2016-05-01' 
mymaxdate will be calculated from mymaxmonth to be 
mymaxdate = '2016-05-31' 

Benim asıl maksimum tarih mymaxmonth son günü olacak

$scope.maxDate = new Date(
        $scope.mymaxmonth + (TO THE END OF THE MONTH) 
       ); 

Dikkat edilmesi gereken tek şey, new Date(), belirtilen tarihten önceki bir tarihi döndürür. Örneğin:

$scope.minDate = new Date(
        $scope.mymindate 
       ); 

$ scope.minDate Wed Mar 30 2016 17:00:00 GMT-0700 (PDT) döndürür Ben 30 Mart yerine 1 Nisan döner ve bir zaman dilimi hata gibi görünüyor neden nedenini baktı?

'2016-04-01' bir mymindate ayarlamak ve mymaxdate = '2016-05-31' değerini almak ve bu aralığın dışındaki tüm tarihleri ​​devre dışı bırakmak istiyorum. Beginners Guide to Javascript Date and Time'u okudum ve burada denedim. Ben şablonunda

$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); 

: denetleyici olarak

Ben

<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> 
+0

"*… bir saat dilimi hatası gibi görünüyor *". Bir hata değil, ECMA-262'nin yazarları tarafından verilen kötü bir tasarım kararı, bkz. [* Yeni Tarih() neden bir gün kaldırılıyor? *] (Http://stackoverflow.com/questions/36698286/why-is-new- tarih-çıkarma-a-day-javascript). * Tarih * yapıcısının (ve * Date.parse * öğelerinin eşdeğerleri) zayıf ayrışmasından kaçınmanın tek yolu, tarihi el ile ayrıştırmaktır. Yani ya bir fonksiyon yazınız (2 satır kod) ya da kütüphane kullanınız. GitHub'da çok sayıda küçük ayrıştırma ve biçimlendirme kitaplığı var veya yapacak başka bir tarihiniz varsa moment.js'ye gidiniz. – RobG

+0

Oh, 31 Mayıs 2016 için bir Tarihiniz varsa ve bir ay eklediyseniz, 01 Temmuz-2016 arasında bir tarih alacaksınız (31 Haziran olduğu için, Temmuz ayına kadar geçerli olacaktır). Tarih aritmetiği önemsiz değildir ve çoğu neden bu tür şeyler için küçük (veya belki de büyük) bir kütüphane kullanır. – RobG

+0

@RobG Bu, uygulamamdaki tarihleri ​​kullanacağım tek zamandır, bu yüzden mümkünse bir kütüphane bağımlılığı eklemekten uzak durmayı tercih ederim. – jenryb

cevap

4

size :) yardımcı olacaktır tarih manipülasyonları, anladım.Benim denetleyicisi olarak http://plnkr.co/edit/6U4YdTIyFXjOqRJm2qTq?p=preview

Ben: Ben min-tarih veya MAX ihtiyacı kadar sona ermedi

datepicker-options="dateOptions" 

: Benim şablonunda

var mindate = new Date($scope.mymindate); 
$scope.minDate = new Date(mindate.getTime()+(1*24*60*60*1000)); //Due to poor design by the authors of ECMA-262 the date is parsed to be a day behind, so we must add a day 

var maxdate = new Date($scope.mymaxmonth); 
$scope.maxDate = new Date(maxdate.getFullYear(), maxdate.getMonth() + 2, 0); //Add a month to get to the end of the month. 

$scope.dateOptions = { 
    maxDate: $scope.maxDate, 
    minDate: $scope.minDate, 
}; 

İşte çalışma plunker olduğunu çünkü tarihler her ikisini de kapsar. Ben dürüst olacağım, neden sadece bir tane yerine macdate.getMonth() 'a iki tane eklemeniz gerektiğinden emin değilsiniz, ama işe yaradı.

+0

; 'maxdate =' 2016-05-01 'sorusuna göre ayarlandı ve' 2016-05-31 'den sonra devre dışı bırakmak istedim. maxdate.getMonth() + 2' sonra gereksiniminizi yerine getiriyor musunuz? gösteriminiz 2 ay sonra devre dışı bırakıldı –

5

size input devre dışı bırakmak için tarih için uygun option ile datepicker-options ayarlamanız gerekir. Örneğinizde datepicker-options="dateOptions" kullanıldı ancak kontrol cihazınızda dateOptions bildirilmedi.

dateOptions'u maxDate ve minDate için ayarlamalısınız. gibi

$scope.dateOptions = { 
    maxDate: new Date($scope.maxDate), 
    minDate: new Date($scope.mymindate) 
}; 

ve maxDate kurmak ve minDate gibi:

$scope.mymindate = new Date('2016-04-01'); 
$scope.mymaxmonth = new Date('2016-05-01'); //wanted mymaxdate to be '2016-05-31' 

$scope.minDate = new Date($scope.mymindate); 

$scope.maxDate = new Date($scope.mymaxmonth.getFullYear(),$scope.mymaxmonth.getMonth()+1,0); 

ve HTML:

<p class="input-group"> 
    <input type="text" class="form-control" uib-datepicker-popup="{{format}}" ng-model="dt" is-open="popup1.opened" min="minDate" max="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> 

Plunker Demo görebiliyor ve umarım bazı can sıkıcı sonra