繁体   English   中英

当部署在Amazon Web Services上时,如何在ExpressJS应用中获取浏览器时区?

[英]How can I get the browser timezone in my ExpressJS app when deployed on Amazon Web Services?

我使用部署在AWS EC2实例上的Express JS构建了一个小型聊天室应用程序。 开发应用程序时,我可以从机器上获取本地日期,以在聊天窗口中生成时间戳。 但是,既然我已经将机器部署到了AWS,那么生成的时间戳就是虚拟机的时间戳,而不是客户端的时间戳。

我已经尝试过使用Moment JS和Moment Timezone JS来生成时间戳记-我已经尝试过使用moment.tz.guess()客户端-所有这些在本地部署时都可以正常工作,但是我仍然可以使用UTC我的AWS实例上的时区和不正确的时间戳。 我想要的行为是获取发送请求的浏览器的时间戳。

我到处都是StackOverflow,如果我缺少某些东西或没有完全理解这些东西,我感到抱歉。 我可以找到的所有方法都给了我本地系统时间,但是一旦部署,我的时间戳就会消失,反映出AWS实例的时间戳。

如何获得客户端的时间显示为时间戳,而不是服务器的时间? 我应该更改我的AWS实例时区设置吗? 即使我确实更改了AWS服务器上的时区,如何为在虚拟机所在时区之外连接的用户收集时区?

衷心感谢您为我指明正确方向的任何帮助。 我很困惑,我的策略可能不正确:(

我能够解决问题,使我的聊天应用显示客户端时间,而不是服务器时间,而无需以任何方式更改服务器时间。

这是我所做的:

将Moment.JS库导入我的客户端:

<script src="/moment/moment.js"></script>
<script src="/moment-timezone/builds/moment-timezone-with-data.js"></script>

服务器消息时间戳转换为客户端时区:

message.timestamp = moment(message.timestamp).tz(moment.tz.guess()).format('h:mm:ss A');

服务器记录的时间戳( message.timestamp )转换为moment.js可以收集的任何时区( moment.tz.guess() )。 然后转换为我想要的格式。

我曾尝试用VPN欺骗它,但它似乎不使用地理定位,而是从用户的系统时间收集它。 因此,即使通过来自该国另一端的VPN连接,我仍然可以获取本地系统时间。 我能够确认转换正在正常进行,因为另一个时区的家庭成员能够尝试我的应用程序,并且看到时间确实转换成功 以前在部署的计算机上,时间戳记与本地计算机不匹配。 但是现在,它转换为我的时区和其他人的-酷!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM