是否可以使用角度使用与浏览器不同的时区?

时间:2017-04-26 14:55:25

标签: angularjs date

我们的应用程序的用户必须选择他们想要工作的时区。这是因为他们可能专门为其他时区的客户工作。

然后将应用程序的日期存储在UTC中。

当将utc日期显示为本地日期时,Javascript采用浏览器的时区偏移量,这不是我想要的。

为了显示日期,我有一个过滤器。它采用因浏览器而应用的偏移量并将其删除。然后应用用户定义的偏移量。这适用于显示值。

示例可能是:用户坐在UTC + 03:00,但他在应用程序中的设置是UTC-4:00。 在数据库中,UTC值为早上6点。所需的显示值是6-4 = 2am。这是通过删除因浏览器(-3)而应用的偏移量然后应用其设置的偏移量来实现的。

load()

为了显示值,这是有效的,但我找不到更新值的方法。样本中的调整值(2am)将在范围内结束并覆盖上午6点的原始值。我可以看到当我将值更改为3然后再更改为2.有没有办法处理此问题?就像控制dom元素更改时在范围中设置的内容一样。

1 个答案:

答案 0 :(得分:0)

我最终得到了一个指令,用于处理视图中的值更新时的情况

指令

app.directive('tzAdapterTime', function () {
    return {
        require: 'ngModel',
        link: function ($scope, $element, $attrs, modelCtrl) {
            modelCtrl.$formatters.push(function (inputValue) {
                var offset = moment(modelCtrl.$modelValue).parseZone().utcOffset();

                return moment(modelCtrl.$modelValue).subtract(offset, 'minute').toDate();
            });

            modelCtrl.$parsers.push(function (inputValue) {
                var offset = moment(inputValue).parseZone().utcOffset();
                return moment(inputValue).add(offset, 'minute').toDate();
            });
        }
    };
});

查看

    <input type="datetime-local"  ng-model="article.publish" tz-adapter-time >