Вы не можете извлечь часовой пояс из даты, потому что в нем нет информации о часовом поясе. Вы сказали: «Я конвертирую дату в часовом поясе США как», но вы этого не сделали. Вы просто уменьшили его на 7 часов. Часовой пояс по-прежнему UT C.
Вы должны использовать moment-timezone
(не обрабатывать вещи жестким способом и вручную, как сказал @GetSet). Вот решение:
const moment = require('moment');
const tz = require('moment-timezone');
let date = moment('2020-06-19T03:55:12.000Z');
let syncDate = date.tz('America/Los_Angeles')
console.log(syncDate.format());
Но я предлагаю вам использовать Day.js
. Код будет:
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
const dDate = dayjs('2020-06-19T03:55:12.000Z');
console.log(dDate.utcOffset(-7*60).format()); //2020-06-18T20:55:12-07:00
Раньше я использовал moment.js
. Пробовал Date-fnd
24 часа. И, наконец, я перешел на День. js. Он новый (начало в конце 2018 года), но он растет так быстро ( взгляните на эту ссылку и укажите срок действия 5 лет). Самое замечательное в этом то, что « ОНО ВСЕГДА ДЕЛАЕТ, ЧТО ГОВОРИТ ». Moment и Date-fns - нет. (не всегда). Он использует оболочку, поэтому вы никогда не работаете напрямую с объектом Date. Решает трудности и проблемы. Это неизменяемый и всегда возвращает новый объект, и вы можете связывать функции. Day. js имеет наименьший размер (2 КБ). Документация отличная, и вы можете очень быстро запустить ее. (Более понятно, как работают другие библиотеки.)
Здесь я должен сказать, что Dayjs
производительность не так хороша, как Moment в расчетах, но намного лучше (чем особенно Moment) при синтаксическом анализе и форматировании.
Я настоятельно рекомендую вам прочитать эту статью: Почему вы не должны использовать Moment. js
Edit (1): как @GetSet упоминается в комментарии для OP, которые могут нуждаться в решении в Moment. js Я добавил его к ответу.
Edit (2): Добавление причины, по которой вы не можете достичь своего результата так, как OP решает его.