Javascript 设置全局时区

Javascript 设置全局时区,javascript,datetime,timezone,momentjs,Javascript,Datetime,Timezone,Momentjs,我正在使用Moment.js处理web应用程序中的日期。服务器以毫秒UTC为单位返回所有日期。现在,我必须显示应用特定时区的日期(基于用户设置) 有没有办法全局设置时区,而不是更改对momentjs的所有调用来处理它?我没有做过大量的测试,但在粗略的测试中看起来不错。我可以在时刻时区0.0.1中实现这一点: var serverTimezoneOffset = <?php echo timezone_offset_get(new DateTimeZone(date_default_time

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


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

我没有做过大量的测试,但在粗略的测试中看起来不错。我可以在时刻时区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);
var serverTimezoneOffset=;
moment.updateOffset(新日期().getTimezoneOffset()-serverTimezoneOffset);

在过去遇到过这个问题,我的解决方案是创建一个力矩工厂,从基本配置中配置力矩对象。您可以使其与需要时刻一样透明—引用您的包并像使用时刻一样使用类—但实际上您正在调用一个时刻包装器对象,该对象为时刻实现提供所选时区。

使用同一网站上的时刻时区库: 它让你做一些事情,比如:

moment(utcDateTime).tz(settings.timezone).format(settings.dateFormat);
我建议实现一个用户类/对象,该类/对象具有将UTC转换为用户时区的服务功能。看看这把小提琴:

日期用作UTC,但视图使用用户类的日期格式方法根据用户的首选项调整UTC日期并设置其格式。

您可以使用:

moment.tz.setDefault(String);
例如
  • npm安装时刻时区
  • var moment=require('moment-timezone')并使用此对象
    而不是通常的
    时刻
  • moment.tz.setDefault(字符串)字符串所在的位置
  • 例如:

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

    文档:

    您是指用户计算机的本地时区吗?或者您是指来自您自己代码的时区字符串,如
    美国/纽约
    ?我是指来自服务器的时区字符串,如美国/纽约。我知道我可以用momentjs时区处理。我的问题是:如何在应用程序启动时设置一次,而不是用moment().tz('America/New_York')修改对moment()的所有调用?抱歉,该功能不存在。您可以在中请求它。谢谢,谢谢,马特。我刚刚打开了一个。效果很好,只需记住从npm添加
    时刻时区
    ,从“时刻时区”添加
    时刻而不是从
    时刻
    导入
    时刻
    var moment = require('moment-timezone');
    moment.tz.setDefault("America/New_York");