2

選択した日付の値を時間のない日付として ng-model に保存できるようにする必要があります。

これが私の見解です:

<script type="text/ng-template" id="form_field_datetime">
  <h3 style="color:coral ;">{{field.displayName}}</h3>
  <br />
  <div>
    <div ng-controller="dateCtrl">
        <p class="input-group">
          <input type="text" class="form-control" datepicker-popup="{{format}}" is-open="opened" ng-required="true" ng-model="field.theValues[0]" />
          <span class="input-group-btn">
            <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
          </span>

        </p>
    </div>  
  </div>
</script>

ここに画像の説明を入力

上記の日付を選択すると、私の ng-model に保存された値は次のようになります。

2012-03-12T22:00:00.000Z

私は欲しい:

2012-03-13

これがコントローラーです(例とほぼ同じです):

  app.controller('dateCtrl', ['$scope', 
      function ($scope) {
        $scope.open = function($event) {
          $event.preventDefault();
          $event.stopPropagation();

          $scope.opened = true;
        };

        $scope.dateOptions = {
          formatYear: 'yy',
          startingDay: 0
        };

        $scope.formats = ['yyyy-MM-dd', 'dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
        $scope.format = $scope.formats[0];

      }
  ]);

これを回避するにはどうすればよいですか?

4

1 に答える 1

2

質問のコメントで前述したディレクティブを使用して、選択した日付を処理し、時間情報を削除しました。

<script type="text/ng-template" id="form_field_date">
  <h3 style="color:coral ;">{{field.displayName}}</h3>
  <br />
  <div>
    <div ng-controller="dateCtrl">
        <p class="input-group">
          <input datepicker-localdate type="text" class="form-control" datepicker-popup="{{format}}" is-open="opened" ng-required="true" ng-model="field.theValues[0]" />
          <span class="input-group-btn">
            <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
          </span>

        </p>
    </div>  
  </div>
</script>

コントローラ (dateCtrl):

   app.controller('dateCtrl', ['$scope', 
      function ($scope) {
        $scope.open = function($event) {
          $event.preventDefault();
          $event.stopPropagation();

          $scope.opened = true;
        };

        $scope.dateOptions = {
          formatYear: 'yy',
          startingDay: 0
        };

        $scope.formats = ['yyyy-MM-dd', 'dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
        $scope.format = $scope.formats[0];

      }
  ]);

ディレクティブ (datepicker-localdate):

app.directive('datepickerLocaldate', ['$parse', function ($parse) {
    var directive = {
        restrict: 'A',
        require: ['ngModel'],
        link: link
    };
    return directive;

    function link(scope, element, attr, ctrls) {
        var ngModelController = ctrls[0];

        // called with a JavaScript Date object when picked from the datepicker
        ngModelController.$parsers.push(function (viewValue) {
            console.log(viewValue);console.log(viewValue);console.log(viewValue);
            // undo the timezone adjustment we did during the formatting
            viewValue.setMinutes(viewValue.getMinutes() - viewValue.getTimezoneOffset());
            // we just want a local date in ISO format
            return viewValue.toISOString().substring(0, 10);
        });
    }
}]);

それは今すべて動作します!

于 2015-05-12T15:20:29.797 に答える