我正在使用momentjs来处理我的Web应用程序中的日期。服务器返回所有日期,以毫秒为单位。现在我必须显示应用特定时区的日期(基于用户设置)。
有没有办法全局设置时区而不是更改所有对momentjs的调用来处理它?</ p>
答案 0 :(得分:49)
您可以{/ 3}}使用:
moment.tz.setDefault(String);
moment.tz.setDefault("America/New_York");
答案 1 :(得分:3)
npm install moment-timezone
var moment = require('moment-timezone');
并使用此对象
而不是通常的moment
。moment.tz.setDefault(String);
,其中String为a time zone
identifier。例如:
var moment = require('moment-timezone');
moment.tz.setDefault("America/New_York");
答案 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);