【问题标题】:Understanding the conversion of date and time to specific timezone了解日期和时间到特定时区的转换
【发布时间】:2019-04-18 11:43:59
【问题描述】:

我在 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”并且需要将其转换为相同的?

【问题讨论】:

    标签: javascript momentjs moment-timezone


    【解决方案1】:

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

    【讨论】:

    • 那个 UTC。我们怎么知道时间是UTC。它有特定的格式吗?
    • UTC日期格式为YYYY-MM-DDTHH:mm:ss.sssZ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多