Следуя строке запроса в комментариях к вопросу, кажется, что ваша проблема заключается в том, что из-за смещения часового пояса временные метки, сохраненные в БД, сохраняются без смещения часового пояса, и так как ваш желаемый часовой пояс PST (UT C -8 часов), временные метки на 8 часов вперед, например, то, что должно было быть 2010-04-23T13:00:00Z
, стало 2010-04-23T21:00:00Z
.
Так что здесь нужно сделать, это смещение ut c для вашего Нужный часовой пояс необходимо получить и добавить к дате.
Смещение в вашем случае известно (-8 часов). Однако мы можем получить правильное смещение любого желаемого часового пояса из библиотеки moment-timezone
.
const moment_timezone = require('moment-timezone');
//a sample timestamp you're getting from your db
const myDateObj = new Date("2010-04-23T21:00:00Z");
//timezone for PST as understood by moment-timezone
const myMomentTimezone = "America/Los_Angeles";
//offset for your timezone in milliseconds
const myTimezoneOffset = moment_timezone.tz(myMomentTimezone).utcOffset()*60000;
//perfom the correction
const getCorrectedDateObj = (givenDateObj) => new Date(givenDateObj.valueOf() + myTimezoneOffset);
console.log(getCorrectedDateObj(myDateObj));
Вы можете заметить, что мы на самом деле меняем отметку времени, поскольку данная отметка времени и требуемые временные метки, в силу природы ошибки, по существу отличаются временных меток. Момент-часовой пояс используется здесь только для получения смещения, он не используется для «преобразования» чего-либо.