AngularJS глобальное смещение времени по часовой стрелке
Я хочу показать даты относительно часовых поясов пользователей.
Моя надежда заключается в том, что Angular имеет способ глобально настроить фильтр Date
, чтобы сделать это - необходимость делать это вручную в каждом конкретном случае кажется неправильным.
Мои временные метки уже завернуты в функцию timestamp()
(просто умножить на 1000), но я бы предпочел не изменять эту функцию, если мне это не нужно.
Edit:
Я делаю это, и он работает, но, как указано выше, я хотел бы установить этот уровень выше, если возможно
$scope.timestamp = function (unix_time) {
var epoch = (unix_time * 1000);
var date = new Date();
var localOffset = (-1) * date.getTimezoneOffset() * 60000;
var stamp = Math.round(new Date(epoch + localOffset).getTime());
return stamp;
};
Ответы
Ответ 1
Итак, благодаря изменениям в angular 1.4.x это теперь тривиально. Правильный способ справиться с этим заключается в создании декоратора, который изменяет встроенный фильтр даты до его запуска. Это тривиально легко и не будет влиять на производительность.
Это я использую. Он просто добавляет DEFAULT_TIMEZONE, если часовой пояс не указан. Это приводит к перемещению всех дат в приложении в GMT до тех пор, пока не будет указан другой часовой пояс.
module.config(['$provide', function($provide) {
var DEFAULT_TIMEZONE = 'GMT';
$provide.decorator('dateFilter', ['$delegate', '$injector', function($delegate, $injector) {
var oldDelegate = $delegate;
var standardDateFilterInterceptor = function(date, format, timezone) {
if(angular.isUndefined(timezone)) {
timezone = DEFAULT_TIMEZONE;
}
return oldDelegate.apply(this, [date, format, timezone]);
};
return standardDateFilterInterceptor;
}]);
}]);
Ответ 2
Из официальной документации:
Временные зоны
Имейте в виду, что фильтр Angular datetime использует настройки часового пояса браузера. То же самое приложение покажет разное время информации в зависимости от настроек часового пояса компьютера, которые приложение работает. Ни Javascript, ни Angularв настоящее время поддерживает отображение даты с часовым поясом, указанным в разработчика.
http://docs.angularjs.org/guide/i18n
Уровень "выше" может создавать тип оболочки (класс AKA,...) с вашей функцией как конструктором. Это должно быть закодировано в точке входа приложения для возможности его использования повсюду.
Ответ 3
Вы проверили momentjs
http://momentjs.com/?
Там также angular -timezones, но я не могу говорить с этим пакетом (https://github.com/michaelahlers/angular-timezones).