フォーマッターとパーサーのもう1つの使用法は、日付をUTC時間で格納し、入力時にローカル時間で表示する場合です。このために、以下のdatepickerディレクティブとutcToLocalフィルターを作成しました。
(function () {
'use strict';
angular
.module('app')
.directive('datepicker', Directive);
function Directive($filter) {
return {
require: 'ngModel',
link: function (scope, element, attr, ngModel) {
element.addClass('datepicker');
element.pickadate({ format: 'dd/mm/yyyy', editable: true });
// convert utc date to local for display
ngModel.$formatters.push(function (utcDate) {
if (!utcDate)
return;
return $filter('utcToLocal')(utcDate, 'dd/MM/yyyy');
});
// convert local date to utc for storage
ngModel.$parsers.push(function (localDate) {
if (!localDate)
return;
return moment(localDate, 'DD/MM/YYYY').utc().toISOString();
});
}
};
}
})();
このutcToLocalフィルターを使用して、現地時間に変換する前に入力日付が正しい形式であることを確認します。
(function () {
'use strict';
angular
.module('app')
.filter('utcToLocal', Filter);
function Filter($filter) {
return function (utcDateString, format) {
if (!utcDateString) {
return;
}
// append 'Z' to the date string to indicate UTC time if the timezone isn't already specified
if (utcDateString.indexOf('Z') === -1 && utcDateString.indexOf('+') === -1) {
utcDateString += 'Z';
}
return $filter('date')(utcDateString, format);
};
}
})();
moment.jsは、ローカルの日付をutcの日付に変換するために使用されます。
pickadate.jsは、使用されるdatepickerプラグインです
(123) 123-1234
は、電話番号の表示など、モデルの表示値を変更します。パーサーはデータが変更されるたびにデータを読み取り、通常、入力の$ valid状態を設定するために使用されます。ドキュメントには両方の例があります。