2016-05-16 15 views
0

Datepickerが正式な例としてdateオブジェクトであると期待する理由を誰もが説明できますか? 角度材料 - Datepicker

$scope.myDate = new Date('2015-01-11'); 

は、私は単に可能性のある方法はあります:私は、フィールドがデータ型であるかどうかを判断して、値を変換する必要がありますフォームにサーバの応答を結合する前ので https://material.angularjs.org/latest/demo/datepicker

が、これは苦痛です正直に言うと、 datepickerに文字列値を入力しますか?

$scope.myDate = '2015-01-11'; 
+0

ご質問が不明な場合は申し訳ありません。標準のHTML日付ピッカーが正規化された日付形式YYYY-MM-DDを受け入れることを意味しました。 ' ' JSON/AJAXの値はバインドするのが非常に簡単ですサーバーの応答。 –

答えて

0

文字列値の問題は解析されます。 2016年5月10日と2016年10月5日は混乱する可能性があります。 2016-05-10または2016-10-05日付オブジェクトはそれを保護します。定義されたフィルタを使用して文字列データを日付オブジェクトに変換することはできませんか?

私はYYYYMMDD(20160516)という数値の日付形式を使用するAngular 1.xの日付フィルタからいくつかのコードをすぐに修正しました。

/** 
* @name yourDate 
* @ngdoc filter 
* @requires $filter 
* @param DateValue {string} Date Value (YYYY-MM-DD) 
* @returns Date Filter with the Date Object 
* @description 
* Convert date from the format YYYY-MM-DD to the proper date object for future use by other objects/filters 
*/ 
angular.module('myApp').filter('yourDate', function($filter) { 
     var DateFilter = $filter('date'); 
     return function(DateValue) { 
      var Input = ""; 
      var ResultData = DateValue; 
      if (! ((DateValue === null) || (typeof DateValue == 'undefined'))) { 
       if (Input.length == 10) { 
        var Year = parseInt(Input.substr(0,4)); 
        var Month = parseInt(Input.substr(5,2)) - 1; 
        var Day = parseInt(Input.substr(8, 2)); 
        var DateObject = new Date(Year, Month, Day); 

        ResultData = DateFilter(DateObject);   // Return Input to the original filter (date) 
       } else { 
       } 
      } else { 
      } 
      return ResultData; 
     }; 
    } 
); 

/** 
* @description 
* Work with dates to convert from and to the YYYY-MM-DD format that is stored in the system. 
*/ 
angular.module('myApp').directive('yourDate', 
    function($filter) { 
     return { 
      restrict: 'A', 
      require: '^ngModel', 
      link: function($scope, element, attrs, ngModelControl) { 
       var slsDateFilter = $filter('yourDate'); 

       ngModelControl.$formatters.push(function(value) { 
        return slsDateFilter(value); 
       }); 

       ngModelControl.$parsers.push(function(value) { 
        var DateObject = new Date(value);     // Convert from Date to YYYY-MM-DD 
        return DateObject.getFullYear().toString() + '-' + DateObject.getMonth().toString() + '-' + DateObject.getDate().toString(); 
       }); 
      } 
     }; 
    } 
); 

このコードでは標準の角度フィルタオプションを使用しているため、これを素材日付ピッカーと組み合わせることができます。

関連する問題