ui bootstrap datepicker不将js Date()对象作为字符串

时间:2016-11-01 07:10:03

标签: angularjs angularjs-directive angular-ui-bootstrap angular-filters

我在我的项目中使用ui bootstrap datepicker,当我从数据库获取数据时,当我使用

时,此日期值Thu Aug 11 2016 00:00:00 GMT+0530 (India Standard Time)的类型为string

new Date('Thu Aug 11 2016 00:00:00 GMT+0530 (India Standard Time)');

然后它运行正常,我不想使用controllernew Date();中进行转换,我实际上想要使用directivefilter来实现此转换我能做到吗?我的datepicker字段是:

<input type="text" class="form-control custom-form-control" uib-datepicker-popup="{{format}}" ng-model="moduleName.main.expiryDate" is-open="expiryDateCal.opened" datepicker-options="expiryDateOptions" name="expiryDate" ng-required="true" close-text="Close"/>

1 个答案:

答案 0 :(得分:3)

ng-model的情况下使用过滤器不是一个好主意。所以我创建了一个将字符串日期转换为Date对象的指令。

运行代码示例以检查work.Hope这有帮助,您只需要根据需要使用ng-model将date属性添加到HTML标记。

var app = angular.module('app',[]);
app.controller('Ctrl',function($scope,$filter){
  
  $scope.date="Thu Aug 11 2016 00:00:00 GMT+0530 (India Standard Time)";
   
  });

app.directive('date', function(dateFilter) {
  return {
    require: 'ngModel',
    
    link: function(scope, element, attrs, ngModelController) {
      ngModelController.$parsers.push(function(data) {
        //convert data from view format to model format
        return new Date(data); //converted
      });

      ngModelController.$formatters.push(function(data) {
        //convert data from model format to view format
        return new Date(data); //converted
      });
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" class="widget-content" ng-controller="Ctrl">

  <input type="text" ng-model="date" date/>
  </div>