Moment toDate с часовым поясом не показывает правильное время

каким-то образом я попытался получить часовой пояс America / New_York (мое локальное время составляет -1 час от EST). Но я всегда получаю одно и то же время, когда использую

moment(new Date()).tz("America\New_York").toDate()

Я использую неправильный метод или что случилось? Кто-нибудь может мне помочь, пожалуйста?

вот ссылка на jsFiddle: https://jsfiddle.net/Lgr3qdjf/


person Sida Zhang    schedule 24.07.2019    source источник


Ответы (2)


в соответствии с этой проблемой момент toDate всегда возвращает дату с часовым поясом системы, потому что объект Date javascript всегда находится в местном часовом поясе.

Вы можете использовать format или toString, как показано ниже, чтобы получить дату в желаемом часовом поясе:

var estTime = moment(new Date()).tz("America/New_York").format();

Here's a runnable snippet to fully demonstrate:

moment.tz.add([
    'America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0'
]);

var estTime = moment(new Date()).tz("America/New_York").format();
console.log('StackOverflow Time:', new Date);
console.log('Eastern Time:', estTime)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone.js"></script>

person random_user_name    schedule 24.07.2019

Возможно, вы находитесь не в том часовом поясе, который вы подозреваете (или, по крайней мере, в вашей сети нет)?

Чтобы проверить функциональность, убедитесь, что вы используете известные значения для каждого теста. Ниже приведено обновление вашего примера и ссылка для дальнейшего тестирования:

moment.tz.add([
  'America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0'
]);

let utc_time = moment().utc().format();
let estTime = moment(utc_time).tz("America/New_York").format();

console.log(utc_time);
console.log(estTime)

https://jsfiddle.net/dusthaines/8aqpbo2h/4/

person dusthaines    schedule 24.07.2019