1

我在 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"

我如何让时刻知道这个日期和时间不属于“亚洲/加尔各答”并且需要将其转换为相同的?

4

1 回答 1

2

如果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>

于 2019-04-18T12:25:38.807 回答