用momentjs设置全局时区

时间:2013-07-17 10:45:32

标签: javascript datetime timezone momentjs

我正在使用momentjs来处理我的Web应用程序中的日期。服务器返回所有日期,以毫秒为单位。现在我必须显示应用特定时区的日期(基于用户设置)。

有没有办法全局设置时区而不是更改所有对momentjs的调用来处理它?<​​/ p>

5 个答案:

答案 0 :(得分:49)

您可以{/ 3}}使用:

moment.tz.setDefault(String);

例如

moment.tz.setDefault("America/New_York");

答案 1 :(得分:3)

  1. npm install moment-timezone
  2. var moment = require('moment-timezone');并使用此对象 而不是通常的moment
  3. moment.tz.setDefault(String);,其中String为a time zone identifier

例如:

var moment = require('moment-timezone');
moment.tz.setDefault("America/New_York");

文档:https://momentjs.com/timezone/docs/

答案 2 :(得分:2)

使用同一网站上的moment-timezone库:http://momentjs.com/timezone/ 它让你做的事情如下:

moment(utcDateTime).tz(settings.timezone).format(settings.dateFormat);

我建议实现一个用户类/对象,它具有将UTC转换为用户时区的服务功能。看看这个小提琴:

http://jsfiddle.net/guidosch/ofd4unhu/4/

日期以UTC格式提供,但视图使用用户类的日期格式化方法根据用户的偏好调整和格式化UTC日期。

答案 3 :(得分:-5)

过去遇到过这个问题,我的解决方案是创建一个片刻工厂,为基本配置提供瞬间对象。您可以将其视为需要时刻的透明 - 引用您的包并像使用类一样使用类 - 但实际上您正在调用一个时刻包装器对象,它使用所选的timeZone来配置时刻实现。

答案 4 :(得分:-6)

我没有进行过广泛的测试,但在粗略的测试中看起来很正确。我能够使用Moment Timezone 0.0.1:

来做到这一点
var serverTimezoneOffset = <?php echo timezone_offset_get(new DateTimeZone(date_default_timezone_get()), new DateTime('now')) / -60; ?>;
moment.updateOffset(new Date().getTimezoneOffset()-serverTimezoneOffset);