Мы пытаемся использовать momentjs для его функций часового пояса, которые являются удивительными. Мы также используем bootprap ui timepicker, который ожидает datetime как ng-model. Теперь попытка конвертировать момент в datetime теряет часовой пояс и переключается обратно в локальный часовой пояс. Я думал о том, чтобы создать собственный пользовательский таймер, но сначала я хотел проверить и посмотреть, не сталкивался ли кто-то еще с этой проблемой раньше. Заранее спасибо!Moment js Timepicker
(function() {
'use strict';
moment.tz.setDefault("America/Phoenix");
angular.module('timepickerPop', ['ui.bootstrap'])
.factory('timepickerState', function() {
var pickers = [];
return {
addPicker: function (picker) {
pickers.push(picker);
},
closeAll: function() {
for (var i = 0; i < pickers.length; i++) {
pickers[i].close();
}
}
};
})
.filter('momentFilter', function() {
return function (input) {
if (input == undefined) return "";
return input.format("hh:mm A");
};
})
.directive("timeFormat", ['$filter', function ($filter) {
return {
restrict: 'A',
require: 'ngModel',
scope: {
showMeridian: '=',
},
link: function (scope, element, attrs, ngModel) {
var parseTime = function (viewValue) {
//Not a concern at the moment
};
ngModel.$parsers.push(parseTime);
var showTime = function (data) {
parseTime(data);
return $filter('momentFilter')(data);
};
ngModel.$formatters.push(showTime);
scope.$watch('showMeridian', function (value) {
var myTime = ngModel.$modelValue;
if (myTime) {
element.val(showTime(myTime));
}
});
}
};
}])
.directive('timepickerPop', ['$document', 'timepickerState', function ($document, timepickerState) {
return {
restrict: 'E',
transclude: false,
scope: {
inputTime: "=",
showMeridian: "=",
disabled: "="
},
controller: ['$scope', '$element', function ($scope, $element) {
$scope.isOpen = false;
$scope.disabledInt = angular.isUndefined($scope.disabled) ? false : $scope.disabled;
$scope.toggle = function() {
if ($scope.isOpen) {
$scope.close();
} else {
$scope.open();
}
};
}],
link: function (scope, element, attrs) {
var picker = {
open: function() {
timepickerState.closeAll();
scope.isOpen = true;
},
close: function() {
scope.isOpen = false;
}
}
timepickerState.addPicker(picker);
scope.open = picker.open;
scope.close = picker.close;
scope.$watch("disabled", function (value) {
scope.disabledInt = angular.isUndefined(scope.disabled) ? false : scope.disabled;
});
scope.$watch("inputTime", function (value) {
if (!scope.inputTime) {
element.addClass('has-error');
} else {
element.removeClass('has-error');
}
});
element.bind('click', function (event) {
event.preventDefault();
event.stopPropagation();
});
$document.bind('click', function (event) {
scope.$apply(function() {
scope.isOpen = false;
});
});
},
template: "<input type='text' class='form-control' ng-model='inputTime' ng-disabled='disabledInt' time-format show-meridian='showMeridian' ng-focus='open()' />"
+ " <div class='input-group-btn' ng-class='{open:isOpen}'> "
+ " <button type='button' ng-disabled='disabledInt' class='btn btn-default ' ng-class=\"{'btn-primary':isOpen}\" data-toggle='dropdown' ng-click='toggle()'> "
+ " <i class='glyphicon glyphicon-time'></i></button> "
+ " <div class='dropdown-menu pull-right'> "
+ " <timepicker ng-model='inputTime' show-meridian='showMeridian'></timepicker> "
+ " </div> " + " </div>"
};
}]);
}());
Что вы попробовали? покажите нам некоторый код, чтобы помочь –