设置全局时区

73

我在我的Web应用程序中使用Moment.js处理日期。服务器以毫秒UTC返回所有日期。现在,我必须应用特定时区(基于用户设置)显示这些日期。

有没有全局设置时区的方法,而不是更改所有对momentjs的调用来处理它?


你是指用户计算机的本地时区吗?还是指来自你自己代码的时区字符串,例如 America/New_York - Matt Johnson-Pint
我的意思是来自服务器的时区字符串,例如America/New_York。我知道可以使用momentjs-timezone处理它。我的问题是:如何在应用程序启动时设置它一次,而不是修改所有调用moment()的地方为moment().tz('America/New_York')? - Fabrizio Fortino
抱歉,该功能不存在。您可以在moment-timezone问题跟踪器中请求它。谢谢。 - Matt Johnson-Pint
谢谢Matt。我刚刚打开了一个问题 - Fabrizio Fortino
5个回答

109

您可以通过以下方式在Moment中设置默认时区:set the default timezone in Moment

moment.tz.setDefault(String);

例如

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

13
运作良好,只需记得从npm添加moment-timezone,并且使用import moment from "moment-timezone";导入,而不是从moment中导入moment - Lauri Harpf

10
  1. npm install moment-timezone
  2. var moment = require('moment-timezone');,使用这个对象代替通常使用的moment
  3. moment.tz.setDefault(String);其中String是时区标识符

例如:

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

Docs: https://momentjs.com/timezone/docs/


3

使用在同一网站上找到的 moment-timezone 库:http://momentjs.com/timezone/ 它让您可以执行以下操作:

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

我建议实现一个用户类/对象,其中包含一个将UTC转换为用户时区的服务函数。请查看这个代码片段:

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

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

-6
在过去遇到这个问题后,我的解决方案是创建一个时刻工厂,从基本配置中提供时刻对象。你可以让它像引用moment一样透明 - 引用你的包并像使用moment类一样使用它,但实际上你调用的是一个moment包装对象,该对象使用所选时区提供moment实现。

-14

我没有进行过广泛的测试,但是在初步测试中看起来没问题。我能够使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接