【问题标题】:Enforce timezone for angular.js application为 angular.js 应用程序强制执行时区
【发布时间】:2014-09-01 09:14:37
【问题描述】:

我想为 angular.js 应用程序使用一个时区。我知道 angular.js 当前使用浏览器时区设置进行日期格式设置,但我想覆盖此设置,以便我可以为用户强制执行特定时区,使其不依赖于浏览器设置。

这是一个有问题的业务应用程序,因此不需要用户特定的时区。一切都发生在公司指定的时区,这就是为什么我想为每个用户强制执行它。数据以 UTC 格式保存,但需要以公司时区为每个用户显示,而不取决于用户位置/区域设置/浏览器设置。

有什么方法可以做到这一点,任何人都知道吗?如果有的话,非常感谢您指出正确的方法:) 到目前为止,我的运气为零。

【问题讨论】:

    标签: javascript angularjs datetime timezone


    【解决方案1】:

    您可以使用 timezone.jsmoment.js 等库。我已经成功使用了时区,而且我听说 moment.js 工作得很好。你可能想要做一个可注射的工厂..

    angular.module('date', [])
    .config(function () {
        timezoneJS.timezone.zoneFileBasePath = '/tz';
        timezoneJS.timezone.init();
    })
    .service('dateConverter', function () {
        return {
            toDisplayDate: function (utcDateIn) {
                return new timezoneJS.Date(utcDateIn, 'America/Los_Angeles')
            }
        }
    });
    

    这只是我的想法,但这是您可能必须做的一个示例 - 将日期从原生 JS 转换为库日期。

    【讨论】:

    • 感谢您的评论!当我想将日期格式化为指定时区时,我是否需要单独调用“toDisplayDate(utcDateIn)”方法?我首先要寻找的是一种解决方案,我可以在该解决方案中设置时区应用程序范围,并在每次显示任何地方时强制将日期格式化为给定时区。
    • 这与将日期格式化为时区无关。这是关于将日期对象转换为另一种类型的日期。例如,当您从服务器获取一些数据时,您将通过该方法运行您的日期,而不是调用new Date(...)。然后,您可以将其他日期对象用于 date_format 过滤器之类的内容。但是,无论哪种方式,您都永远无法真正在应用程序范围内做一些神奇的事情......那是一个白日梦:)
    【解决方案2】:

    抱歉,无法更改 JavaScript Date 对象的时区行为。它将始终使用运行它的计算机的时区。

    您能做的最好的事情就是使用one of the libraries listed here 解决它。 Stephen's answer 展示了如何将其中之一集成到 Angular 中。

    另外,当您说“不需要用户特定的时区”时,我会非常仔细地考虑。有时,情况确实如此,但很少见。通常,公司的地点位于多个时区,或者他们有员工出差,或者他们与位于不同时区的客户或合作伙伴互动。

    此外,如果您说的是真的 - 用户始终处于公司的单一时区,那么 已经 不是他们计算机的本地时区吗?如果是这样,那就没什么可做的了。

    如果您有其他时区的用户,但您希望他们使用公司的主要时区,那么这种情况将需要这些库之一。但请仔细考虑其影响。根据用户的距离,甚至他们当前的日期也可能与公司的日期不同。

    【讨论】:

    • 是的,你是对的。感谢您的输入。我将批准此作为已接受的答案,因为它有点回答“可以更改javascript日期对象行为”的问题。正如斯蒂芬指出的那样,我最终在我的应用程序中实现了 moment.js,所以对这个出色的答案表示敬意!谢谢大家!
    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多