了解日期和时间到特定时区的转换

Understanding the conversion of date and time to specific timezone

我在 api 回复中有日期和时间。我需要在用户时区进行转换。

datetime: function (datetime) {
    return moment(datetime, 'YYYY-MM-DD HH:mm:ss').tz(timeZone).format('MMM Do YYYY, h:mm a');
},

然而,start_date_time 与响应中的相同。只是格式变了。如果我换到另一个时区,它工作正常。我的时区是 "Asia/Kolkata"

如何让 moment 知道此日期和时间不属于 "Asia/Kolkata" 并且需要将其转换为相同的日期和时间?

如果start_date_time是UTC时间那么你必须在它的末尾添加一个Z:

const start_date_time = "2019-04-20 02:00:00";
const timeZone = "Asia/Kolkata";
console.log(moment(start_date_time+"Z"));
console.log("Asia/Kolkata date: ", moment(start_date_time+"Z").tz(timeZone).format('MMM Do YYYY, h:mm a'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>

否则你必须首先指定 start_date_time 的时区,然后你可以将它转换为另一个时区:

const start_date_time = moment.tz("2019-04-20 02:00:00", "America/New_York");
console.log(start_date_time.format());

const timeZone = "Asia/Kolkata";
console.log("Asia/Kolkata date: ", start_date_time.tz(timeZone).format('MMM Do YYYY, h:mm a'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>