【问题标题】:Can't change timezone with angular-moment不能用角矩改变时区
【发布时间】:2015-04-05 18:27:00
【问题描述】:

我正在使用带有 angular-moment 的 Angular.js,并且我试图在不同的时区显示日期:

p(style="font-size: 70%",am-time-ago="thing.date")

我包括 moment.js,以及 moment.js 时区数据 (this file)。在我的 .html 文件中:

  <script src="bower_components/moment/moment.js"></script>
  <script src="bower_components/moment-timezone/moment-timezone-with-data.js"></script>

我还在 Angular.js 文件中添加了配置,正如 angular-moment Github 页面上所说:

angular.module('myApp')
  .constant('angularMomentConfig', { timezone: 'America/New_York' })

到目前为止,我已经尝试了很多排列,但似乎没有任何效果。我不知道我可能做错了什么,所以任何建议都非常受欢迎。

【问题讨论】:

  • 嗯。 “我已经尝试了很多 [..] 并且没有任何效果”正在混淆最有价值的事情:代码有什么问题以及您知道这不是原因。当没有给出堆栈跟踪时,有助于猜测发生了什么。
  • @mico:我确实同意,总的来说,这会更有帮助,但我不知道哪里会出错。这就是为什么我要征求建议,只是一些我可以检查的东西。我的 Angular 水平不是那么好,而且我以前从未使用过 moment.js,所以我不知道应该如何组合在一起。我很确定我已经遵循了文档,但我一直在想我可能遗漏了一些东西。
  • 你能告诉我,它是做什么而不是显示你想要的时间吗?
  • 它显示未来的日期,即使时间已经过去。例如,如果日期是 19:00 而当前时间是 19:10,它会说“一小时内”,即使它应该说“10 分钟前”。我假设该问题与默认时区有关,但我无法更改它,因此提出了这个问题。
  • 是的,我的第一个操作是确定 thing.date 是哪个时区,然后查看它与 new_york 时区的关系。

标签: javascript angularjs momentjs angular-moment


【解决方案1】:

您说要使用 angular-moments.js,但没有将 angular-moments.js 本身包含到您的代码中。

查看来自https://www.npmjs.com/package/angular-momentjs 的说明,建议将 bower 和 npm 与以下命令一起使用:

您可以通过以下方式下载 angular-momentjs:

  • (首选)使用 bower 并运行 bower install angular-momentjs --save
  • 使用 npm 并运行 npm install angular-momentjs --save

结果是:

 <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>

 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>

 <script src="app/bower_components/angular-momentjs/angular-momentjs.js"></script>

【讨论】:

  • 对不起,我无法更改时区的问题,它确实显示了一个有效的字符串,虽然说“10分钟前”或类似的。
  • 它是否与 stackoverflow.com/questions/17559726/… 中的夏令时不一致问题有关?在某些情况下,DayLightSaving (DST) 需要使用 isDST( ) 函数单独处理,例如 stackoverflow.com/questions/21918095/…
  • 嗯,我认为即使是这样,它仍然必须将显示的时间从“1 小时内”更改为“4 小时前”。我遇到的问题是,无论我附加哪个时区,到那个日期的“距离”都不会改变。
【解决方案2】:

这是我的解决方案。徘徊到这个问题试图找到解决方案。所以这里是如果其他人也在这里徘徊寻找相同的答案。

从 1.0.0-beta.1 版本开始,可以使用 amMoment 服务设置时区。只需注入 amMoment 服务并调用 changeTimeZone:

amMoment.changeTimezone('Europe/London');

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多