我使用部署在AWS EC2实例上的Express JS构建了一个小型聊天室应用程序。当我开发应用程序时,我能够从我的机器中获取本地日期以用于在聊天窗口中生成时间戳。但是,现在我已经将我的机器部署到AWS,生成的时间戳是虚拟机的时间戳,而不是客户端的时间戳。
我尝试过使用Moment JS和Moment Timezone JS来生成时间戳 - 我尝试使用moment.tz.guess()
客户端 - 所有这些在本地部署时都能正常工作,但我仍然得到了我的AWS实例上的UTC
时区和不准确的时间戳。我希望的行为是获取发送请求的浏览器的时间戳。
我看了很多StackOverflow,如果我遗漏了某些东西或者我没有完全理解的话,我很抱歉。我能找到的所有方法都给了我本地的系统时间,但是一旦部署,我的时间戳就会关闭,反映出AWS实例的时间戳。
如何让客户端的时间显示为时间戳,而不是服务器的时间?我应该更改我的AWS实例时区设置吗?即使我确实更改了AWS服务器上的时区,我如何能够为在虚拟机所在的时区之外连接的用户收集时区?
真诚地感谢您帮助我指明正确的方向。我对此感到困惑,我的策略可能不正确:(
答案 0 :(得分:1)
我能够解决我的问题,让我的聊天应用程序显示客户端时间,而不是服务器时间,而不会以任何方式更改服务器时间。
这就是我的所作所为:
<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连接,我仍然获得本地系统时间。我能够确认转换是否正常,因为另一个时区的家庭成员能够尝试我的应用程序并看到成功转换的时间。以前在我部署的计算机上,时间戳与本地计算机不匹配。但现在,它转换为我的时区和其他人 - 酷!