首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能让angular使用不同于浏览器的时区?

有没有可能让angular使用不同于浏览器的时区?
EN

Stack Overflow用户
提问于 2017-04-26 22:55:25
回答 1查看 286关注 0票数 0

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

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

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

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

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

代码语言:javascript
运行
复制
            function standardDateFilterInterceptor(date, format, timezone) {
            if (timezone === "agent") {
                if (date !== null && date !== undefined) {
                    var momentDate = moment(date.toString(), ["YYYY-MM-DD HH:mm:ss"]);
                    if (momentDate.isValid()) {
                        date = momentDate.toDate();
                        let offset = date.getTimezoneOffset();
                        if (offset !== null && offset !== undefined) {
                            offset = offset * 60000 * (-1);
                            const dateWithOffset = new Date(date.getTime() + offset);
                            date = dateWithOffset;
                        }
                    }
                }
                if (agentTimeZoneOffset !== null && !angular.isUndefined(agentTimeZoneOffset)) {
                    timezone = agentTimeZoneOffset;
                }

            }
            return originalFilter.apply(this, [date, format, timezone]);
        }

对于显示值,这是有效的,但我找不到一种方法来更新值。样本中的调整值(2am)将最终出现在作用域中,并覆盖原始值6am我可以看到,当我将值改为3,然后又变为2时,有没有办法处理这个问题?例如,当dom元素改变时,控制在作用域中设置什么。

EN

回答 1

Stack Overflow用户

发布于 2017-04-27 16:03:12

最后,我使用了一个指令来处理视图中的值被更新时的情况

指令

代码语言:javascript
运行
复制
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();
            });
        }
    };
});

视图

代码语言:javascript
运行
复制
    <input type="datetime-local"  ng-model="article.publish" tz-adapter-time >
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43637729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档