Amazon web services 部署在Amazon Web服务上时,如何在ExpressJS应用程序中获取浏览器时区?

Amazon web services 部署在Amazon Web服务上时,如何在ExpressJS应用程序中获取浏览器时区?,amazon-web-services,express,amazon-ec2,timezone,momentjs,Amazon Web Services,Express,Amazon Ec2,Timezone,Momentjs,我使用部署在AWS EC2实例上的Express JS构建了一个小型聊天室应用程序。当我开发这个应用程序时,我能够从我的机器上抓取一个本地日期,用于在聊天窗口中生成时间戳。然而,现在我已经将我的机器部署到AWS,生成的时间戳是虚拟机的时间戳,而不是客户端的时间戳 我尝试使用矩JS和矩时区JS生成时间戳——我尝试使用矩.tz.guess()客户端——所有这些在本地部署时都可以正常工作,但我仍然在AWS实例上获得UTC时区和不准确的时间戳。我想要的行为是获取发送请求的浏览器的时间戳 我已经找遍了St

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

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

我已经找遍了StackOverflow,如果我遗漏了什么或者没有完全理解,我很抱歉。我能找到的所有方法都会给我本地系统时间,但一旦部署,我的时间戳就会关闭,这反映了AWS实例的时间戳

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


衷心感谢您为我指明了正确的方向。我弄糊涂了,我的策略可能不正确:(

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

以下是我所做的:

已将Moment.JS库导入我的客户端: 服务器记录的时间戳(
message.timestamp
)被转换为moment.js可以收集的任何时区(
moment.tz.guess()
),然后被转换为我想要的格式


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

你问了不止一个问题。简单来说:实例时钟没有同步源,除非你安装ntpd,例如
sudo apt get inst所有ntp
。不要将实例的时区从UTC更改为UTC。UTC时间足够了。为什么在这个实例中不需要它?使用它时,您始终可以将时间转换为所需的时区。@Michael sqlbot感谢您的回复--我正在将UTC时区时间戳转换为
hh:mm:ss A
时间格式,但时间始终是m我尝试检测客户端时区(使用
moment.tz.guess()
但这反映了系统的相同时间。例如,系统现在显示下午6:53,而在我的时区是上午11:53。我只是不知道如何获取我的(客户端)实际时区并生成准确的戳记…很抱歉问了这么多问题/我的困惑。感谢阅读。@SelloMkantjwa感谢您的回答--我尝试转换时间
const timezone=Intl.DateTimeFormat().resolvedOptions().timezone;
然后
const currentTime=moment().tz(timezone.format('hh:mm:ss A'));
,但我认为这是系统时间,比我的时区早7个小时。我尝试在客户端访问
矩.tz.guess()
但这给了我相同的时间戳,提前了7小时。我不知道如何将我的浏览器/本地系统时间与服务器提供的时间进行比较。对于任何混淆,我深表歉意,如果有帮助,我可以发布更多代码。
<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');