【问题标题】:select default timezone in moments.js在 moment.js 中选择默认时区
【发布时间】:2015-11-15 19:17:16
【问题描述】:

我通过以下方式包含moments.js

<script src="../static/js/moment-timezone-full.js"></script>
<script>
    $('.select_timezone').timezones();
</script>

然后我将时区选择在 html 中作为

提供给我的用户
<div class="row">
    <div class="col-lg-4">
        <select class="select_timezone" name="select_timezone"></select>
    </div>
</div>

我的问题是如何选择默认时区?我看到一个人可以做到这一点

moment.tz.setDefault(String);

但我不明白这在我的设置中是如何工作的?

编辑:我的实现只是按照这个例子......

http://www.jqueryscript.net/time-clock/Easy-Timezone-Picker-with-jQuery-Moment-js-Timezones.html

真的没有人知道解决这个问题的方法吗? 卡尔

编辑:我应该澄清为什么 moment.tz.setDefault 不起作用。当我添加行时

moment.tz.setDefault('America/Los_Angeles');

我收到 javascript 错误

Uncaught TypeError: Cannot read property 'setDefault' of undefined

我包含在烧瓶大型教程中解释的时刻,我所做的意义

from flask.ext.moment import Moment
...
moment = Moment()
...
moment.init_app(app)

在我的 html 模板中我这样做了

{% block scripts %}
{{ moment.include_moment() }}
{% endblock %}

moment-timezones 包含在 js 文件中,如上所示。我忘了什么吗? 我只是想为选择设置默认时区

【问题讨论】:

  • 您能否具体说明“遵循此示例”的含义?你打算使用 Timezones jQuery 插件来绘制一个选择框吗?或者你想让自己的实现类似于 Timezones 插件?
  • 另请注意,您在问题中指出的 moment.tz.setDefault 方法是使用 Moment Timezone 库设置默认时区的正确方法。那么,这里真正的问题是什么?
  • @carl 只需将onchange 添加到您的选择元素并使用javascript 获取值并使用moment.tz.setDefault 设置默认时区。怎么了?
  • 请澄清 - 您是否尝试配置 moment.js 的默认时区?或者您是否尝试设置下拉列表的默认选定时区条目?它们是两种截然不同的东西。
  • 我在上面添加了更多解释,说明为什么 moment.tz.setDefault 函数对我不起作用。感谢您的帮助

标签: timezone momentjs


【解决方案1】:

默认情况下,它会显示查看它的人的时区,但您可以通过专门定义它来覆盖它。 在您的示例中,您可以执行以下操作:

<script src="../static/js/moment-timezone-full.js"></script>
<script>
  moment.tz.setDefault("America/New_York");
  $('.select_timezone').timezones();
</script>

【讨论】:

  • 嗨,irnmn,感谢您的回答。我在上面添加了一些文字来解释我在使用这种方法时遇到的错误。
  • @carl 您可以尝试另一种方式,只需手动设置时区,而不是设置默认值。似乎这里有一些很好的细节link。这是假设您正在尝试做的事情。正如其他人评论的那样,您是想在选择菜单中设置默认选项,还是为所有条目设置时区?
  • 我只是想为选择设置默认时区
  • 我假设您正在从预先构建的时刻时区下载中加载一些默认数据,或者您是通过调用 .load() 自己构建数据?他们有许多不同的版本,您使用的是他们的 2014i 版本之一吗?如果你是,他们应该有 moment.tz.setDefault 命令供你使用。您是否尝试在您的 moment.init_app(app) 之后立即使用 moment.tz.setDefault?
  • moment.init_app(app) 仅适用于 moment 包。目前我看不到添加时区 js 文件是如何突然将 .tz 属性赋予 moment 函数的?如果我在我的模板中使用 jinja2 的 moment 函数(例如 {{ moment(date).calendar() }})工作正常,但我不会在 jinja2 之外的任何地方使用 moment ......特别是我没有 .load( ) 除了使用预构建时区下载
【解决方案2】:

查看您发布的内容后,您似乎正在使用来自https://github.com/firstandthird/timezones 的 jquery 插件,当我查看代码时,它使用的是较旧版本的 moment.js(版本 2.8.3)作为见于https://github.com/firstandthird/timezones/blob/master/dist/timezones.full.js

它还使用了 moment-timezone 的旧版本(它在 timezones.full.js 文件的底部,版本 0.2.4 中拉入)并且 moment.tz.setDefault() 直到更高版本。目前最新的是 0.4.0。因此,我建议将您自己的文件与最新版本混合在一起,然后在您的系统上再次尝试,看看它是否有效。

更新:

所以,我查看了您的小提琴,并将其更新为 your fiddle 允许

moment.tz.setDefault("America/New_York");
$('.select_timezone').timezones();

使用我自己混合的 moment.js、moment-timezone.js 和 jquery 插件代码,它工作得很好。基本上,moment-timezone-full.js 文件所做的就是将 moment.js 和 moment-timezone.js 与 jquery 插件代码混合在一起。 (它被列为外部库之一,您也可以在https://gist.github.com/iron-man/deedd9efe988318d842a 找到它。我确实注意到它只会获取列表中该偏移量的第一个时区,而不是您指定的实际时区,但是 moment-timezone.js 库的一个更大的问题,超出了这个问题的范围。

【讨论】:

  • 我将 moment.js 的版本更新为 2.10.6,将 moment-timezone 的版本更新为 0.4.0。不幸的是,它并没有解决问题。错误信息仍然是“Uncaught TypeError: moment.tz.setDefault is not a function”
  • 您是否更新了 moment-timezones-full.js 文件?那是在过时版本中引入的那个。您能否通过放入 console.log 并检查响应的 js 文件来检查版本以确定正在加载的内容,它应该在文件的 cmets 中有版本。
  • 是的,我更新了 moment-timezones-full.js 中的版本...打印出版本确认我现在使用 moment.tz.version = 0.4.0, moment.version = 2.10.6 ...
  • 好的,非常感谢您的耐心等待...必须对时刻时区文件进行大量更改,因此对于任何想要这样做的人,只需使用上面提供的文件irnmn...再次感谢
猜你喜欢
  • 2020-07-24
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
相关资源
最近更新 更多