将时间转换为本地时区不适用于 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')}
我正在使用 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')}