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

时间:2019-04-18 11:43:59

标签: javascript momentjs moment-timezone

我在api响应中有一个日期和时间。我需要在用户时区中进行转换。

start_date_time

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"

如何让我立即知道该日期和时间不属于“亚洲/加尔各答”,需要将其转换为相同的日期?

1 个答案:

答案 0 :(得分: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>