为angular.js应用程序实施时区

为angular.js应用程序实施时区

问题描述:

我想为angular.js应用程序使用单个时区。我知道angular.js目前使用浏览器时区设置来进行日期格式化,但我想重写此设置,以便我可以为用户强制执行特定时区,以便它不依赖于浏览器设置。为angular.js应用程序实施时区

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

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

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

你能做的最好的就是用one of the libraries listed here解决它。 Stephen's answer显示了如何将其中一个集成到Angular中。

此外,当你说“不需要用户特定的时区”时,我会非常仔细地考虑。有时候,情况就是这样,但很少。通常,公司在多个时区都有地点,或者他们有员工出差,或者与不同时区的客户或合作伙伴进行互动。

此外,如果你说的是真的 - 用户总是在公司的单一时区,那么已经是他们的计算机的本地时区?如果是这样,那么没有太多的事情要做。

如果您有其他时区的用户,但希望他们使用公司的主时区,那么这将是一个需要这些库中的一个的情况。但请仔细考虑这一点的影响。取决于用户的距离,即使他们的当前日期可能与公司的日期不同。

+0

是的,你是对的。感谢您的输入。我会批准这个作为接受的答案,因为它回答了“可以javascript的日期对象行为被改变”的问题。 我结束了实施的时刻。js给我的申请,就像斯蒂芬指出的那样,非常赞赏这个伟大的答案! 谢谢你们! – veturi 2014-09-02 11:45:03

+0

您可能还对[这些第三方的角度指令](https://github.com/urish/angular-moment)感兴趣。 – 2014-09-02 14:32:03

您可以使用库如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日期库日期。

+0

感谢您的评论!当我想将日期格式化为指定的时区时,是不是需要单独调用“toDisplayDate(utcDateIn)”方法? 我首先寻找的是一个解决方案,我可以在其中设置时区应用程序,并强制将日期格式化为给定时区,以便每次在任何地方显示时区。 – veturi 2014-09-01 10:05:14

+0

这不是将日期格式化为timezeone。这是关于将日期对象转换为另一种类型的日期。例如,当您从服务器获取一些数据时,您将通过该方法运行日期,而不是调用'new Date(...)'。然后,您可以使用其他日期对象来处理诸如date_format过滤器之类的内容。无论哪种方式,你永远不会真的能够做一些应用程序范围内的东西,只是神奇的作品..这是一个梦想:) – Stephen 2014-09-01 19:14:33