Moment.js - 不同设备上的日期不一致

Moment.js - Inconsistent date on different devices

我在显示日期时遇到了一些问题。当用户select一个日期时,我将其格式化为这样

new Date(date).toISOString().split('T')[0];

因为这是我们的 django 后端期望的格式,然后后端 returns 一个这样的日期:

2021-09-02

然后我将从后端返回的日期格式化为 moment.js:

moment.utc(new Date(date)).format('MMM DD')

但问题是,当我 select“9 月 25 日”时,我得到“9 月 25 日”。

但是我在印度的一些团队成员select“9 月 25 日”他们得到“9 月 24 日”。

如果我 运行 new Date('2021-09-02') 在我的开发工具中。

我得到Wed Sep 01 2021 17:00:00 GMT-0700 (Pacific Daylight Time)

他们得到 Date Thu Sep 02 2021 05:30:00 GMT+0530 (India Standard Time)

我该如何处理这种极端情况?我不确定是否需要更新存储在后端的格式。需要你的建议

这是一个时区问题,问题似乎是您想 select 一个日期(9 月 25 日),但实际上您是 select 一个时间然后转换它到一个字符串来表示一个日期。

当您的用户 select 约会时,您可以让他们 select 日期和月份,而不是整个时间吗?

编辑

嗯,抱歉,问题不在于 selecting 日期,而是在于将从您的服务器返回的日期转换回时间。但你不想要时间,你只想要约会。

您的服务器正在返回类似“2021-09-25”的字符串来表示“9 月 25 日”。您可以解析此字符串并获取重要部分:

function displayDayMonth(date) {
  const [_year, month, day] = date.split("-").map(s => parseInt(s, 10));
  const months = ["Jan", "Feb", //... etc ];
  return `${months[month - 1]} ${day}`;
}

const date = "2021-09-25";
displayDayMonth(date);
// => "Sep 25"

另一方面,如果时间真的很重要怎么办?如果太平洋时间的事件发生在 9 月 25 日,那么该事件的很大一部分发生在印度的 9 月 24 日。也许您没有捕捉到有关该事件的足够细节?