如何在 react-native 中使用 new Date() 将 GMT 时间转换为 AM/PM?

问题描述

我正在一个 react-native 项目中工作并使用 moment 库。我在将时间(格林威治标准时间 5:30 IST)转换为 AM/PM 时遇到问题。它增加了当地当前时间 5:30 小时。 例如。从数据库时间下午 3:00 开始。从 new Date() => 传递后 时间转换为 Wed Jun 23 2021 15:00:00 GMT+0530(印度标准时间)和我需要的领域。当我需要时再次将此格林威治标准时间转换为上午/下午时。它显示的是晚上 8:30 而不是下午 3:00。

代码如下:

var scheduledDeparture = Wed Jun 23 2021 15:00:00 GMT+0530 (India Standard Time)
scheduledDeparture_Time: new Date(ScheduledDeparture),let finalTime = moment.utc(leavedata.scheduledDeparture_Time).format('hh:mm a').replace(/GMT.*/g,"")
console.log("finalTime ",finalTime). // 08:30PM

为什么 GMT 时间在当前时间增加了 5:30 以及如何克服它?

解决方法

您需要包含 moment-timezone,然后您可以使用 utcOffset 方法执行以下操作

let str = '2021-06-23T15:40+01:00';
let date = moment(str).utcOffset(str)
console.log(date.format('DD/MM/YYYY HH:mm'))

如果您正在使用 Date 对象,您可以执行以下操作:

 let scheduledDeparture_Time = new Date()
 console.log(scheduledDeparture_Time.toString(),scheduledDeparture_Time.toGMTString())
 let dt2 = moment(scheduledDeparture_Time)
  console.log(dt2.format('DD/MM/YYYY HH:mm'))

如果您有指定的字符串并且需要保留时间而不考虑时区,那么只需使用 substring 然后应用 moment

 let scheduledDeparture ='Wed Jun 23 2021 15:00:00 GMT+0530 (India Standard Time)'
 let scheduledDeparture_Time = new Date(scheduledDeparture.substring(0,24))
 let dt2 = moment(scheduledDeparture_Time)
  console.log(dt2.format('DD/MM/YYYY HH:mm'))

fiddle