Я получаю метку времени от своего поставщика, который находится в Центральном времени Америки, но без перехода на летнее время. Мне нужно преобразовать это в America / New_York с помощью DST (когда это применимо).
Я попытался использовать обычный JavaScript, а затем перешел на Moment. Я пробовал разные подходы, но не могу получить ожидаемых результатов. Я открыт практически для любой библиотеки. Мне не нужно использовать момент.
Ниже приведены три из множества подходов, которые я пробовал.
Фрагмент кода:
console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A");
console.log("formatted " + d.clone().tz("America/New_York").format('MM/DD/YYYY h:mm:ss A'));
Производит:
6/12/2019 6:35:36
отформатировано 12.06.2009 6:35:36
Это та же дата и время. Если я сделаю это ниже, я получу правильный ответ, но он будет выключен, как только закончится летнее время. И даже если это сработало, это всего лишь взлом. Я хотел бы сделать это правильно.
Фрагмент кода:
console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A");
console.log("formatted " + d.clone().utcOffset(-2).format('MM/DD/YYYY h:mm:ss A'));
Производит:
6/12/2019 6:35:36 AM
отформатировано 12/12/2019 8: 35: 36 AM
Мне кажется, способ сделать это - установить время в UTC с жестко заданным смещением, -6. Тогда я бы остановился на часовом поясе Америка / Нью-Йорк, и все было бы идеально. Но ясно, что я не устанавливаю это правильно:
Фрагмент кода:
console.log(sendTimeString);
let d = moment(sendTimeString, "MM/DD/YYYY h:mm:ss A").utcOffset(-6);
console.log("formatted " + d.clone().tz("America/New_York").format('MM/DD/YYYY h:mm:ss A'));
Производит:
6/12/2019 6:35:36 AM
отформатировано 12.06.2009 6:35:36