将时间转换为本地时区不适用于 React 中的 moment.js

converting time to local timezone not working with moment.js in React

我正在使用 moment:

转换数据库对象上的时间戳
{moment(comment.created_at).local(true).format('h:mm a')}

我的时间以 UTC 时间输出,因为它是在我的数据库中创建的。 例如,当我想查看我的时区 (EST) 或用户的相对时区中的时间时,我看到的是“下午 6:45”。根据目前的文档 local() 将转换为您当前的时区?如我上面的代码所示,调用 local() 方法不会更改时区。我是不是用错了?

我的数据库对象

{
  client_id: 24
  created_at: "2022-02-11 17:41:39.330443"
  id: 22
  report: "sfsf"
  report_category: "Client Assigned"
  volunteer_id: 23
}

我把你的数据库时间戳转换成ISO格式,然后传入你的实现

let t = "2022-02-11 17:41:39.330443"

let utcISOTimestamp = moment.utc(t).toDate()
console.log(utcISOTimestamp)

//let res = moment(utcISOTimestamp).local(true).format('h:mm a');
let res = moment(moment.utc(t).toDate()).local(true).format('h:mm a');

console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

尝试使用:

moment.utc('2022-02-11 17:41:39').local().format('YYYY-MM-DD HH:mm:ss')

您的数据库存储的日期没有偏移指示符。这意味着 moment 无法自动确定时区。根据 documentation on parsing dates:

moment(...) is local mode. Ambiguous input (without offset) is assumed to be local time. Unambiguous input (with offset) is adjusted to local time. * moment.utc(...) is utc mode. Ambiguous input is assumed to be UTC.

因此,如果您知道您的输入是 UTC 并且您知道它不会有偏移量指示符,请使用 moment.utc() 而不是 moment()

此外,您不想使用 local(true),因为传入“true”只会更改对象的时区而不更改时间(请参阅 documentation)。所以你剩下:

{moment.utc(comment.created_at).local().format('h:mm a')}