Понимание преобразования даты и времени в определенный часовой пояс - PullRequest
1 голос
/ 18 апреля 2019

У меня есть дата и время в ответе 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 Ответ

2 голосов
/ 18 апреля 2019

Если start_date_time - время по Гринвичу, в конце его необходимо добавить 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>
...