在服务器时区将日期往返到 Javascript 的最佳方式是什么?

问题描述 投票:0回答:1

我在服务器上的数据库中存储了一个日期时间,代表表演的开始。

我们可以假设演出所在地的时区与网络服务器和数据库服务器相同 - 也就是说,如果说“演出晚上 7 点开始”,那必然且显然是演出本地的。

如果我想将该日期发送到网页,作为对 AJAX 调用的响应,并将数据与另一个数据一起发回,以便负责组织活动的人员可以对其进行编辑,我仍然希望它位于表演本地。如果演出在墨尔本举行,而我将其安排在伦敦,我不想在时间字段中输入 9:00,因为伦敦的 9:00 是墨尔本的 19:00。如果我在网页中查看“演出时间”列表,无论我在伦敦还是墨尔本,我仍然希望它显示 19:00;本地时间与我无关。

但是,如果我从 AJAX 调用中得到一个 JSON 格式的日期,显示 /Date(1714122000000+1000)/,即墨尔本的 19:00,这是正确的,并将其转换为 Javascript Date 对象,我可以' t 不要让它显示在本地时区。如果我将时区偏移量添加到 Date 对象中,以便当我在伦敦时它显示 19:00,那么当我将时间发送回服务器时,它是错误的,我必须再次按偏移量调整它,这感觉很乱。

在浏览器中往返日期同时忽略浏览器时区的最佳方法是什么?

我尝试过:moment、luxon、本机日期对象。 我没有尝试过:滚动我自己的日期时间处理对象,因为我没有疯。

javascript timezone momentjs timezone-offset luxon
1个回答
0
投票

最简单的可能是将时间戳序列化为字符串没有时区信息,即类似

{
  ...
  date: "2024-04-26T19:00",
  ...
}

因为在客户端,当这个日期传递到

new Date()
时,它会根据本地时区进行解释,即无论浏览器运行的时区如何,它都将始终为 19:00 点。然后您可以将日期修改为您想要的任何内容。

当您将日期发送回服务器时,以相同的方式将其序列化,即没有时区信息

{
  ...
  "date": "2024-04-26T19:30",
  ...
}

在后端执行相同的操作,将这个

date
传递到
new Date("2024-04-26T19:30")
中,它将在后端运行的任何时区中进行解释...

© www.soinside.com 2019 - 2024. All rights reserved.