Невозможно изменить часовой пояс с угловым моментом

Я использую Angular.js с angular-moment и пытаюсь отобразить дату в другом часовой пояс:

p(style="font-size: 70%",am-time-ago="thing.date")

Я включаю moment.js, а также данные часового пояса moment.js (этот файл). В моем .html файле:

  <script src="bower_components/moment/moment.js"></script>
  <script src="bower_components/moment-timezone/moment-timezone-with-data.js"></script>

Я также добавил конфигурацию в файл Angular.js, как указано на странице углового момента Github:

angular.module('myApp')
  .constant('angularMomentConfig', { timezone: 'America/New_York' })

До сих пор я пробовал довольно много перестановок, но ничего не работает. Я понятия не имею, что я могу делать неправильно, поэтому любое предложение более чем приветствуется.


person cgf    schedule 05.04.2015    source источник
comment
Хм. Я пробовал много [..] и ничего не работает, это запутывает самое ценное: что не так с кодом и то, что вы знаете, что НЕ является причиной. Помогает угадать, что происходит, когда трассировка стека не указана.   -  person mico    schedule 05.04.2015
comment
@mico: я согласен, что в целом это было бы более полезно, но я понятия не имею, где что-то может пойти не так. Вот почему я прошу предложений, просто то, что, возможно, я мог бы проверить. Мой уровень Angular не так велик, и я никогда раньше не использовал moment.js, поэтому я понятия не имею, как все должно сочетаться. Я совершенно уверен, что следовал документам, но я продолжаю думать, что, возможно, я что-то упускаю.   -  person cgf    schedule 05.04.2015
comment
Не могли бы вы сказать, что он делает вместо того, чтобы показывать время, которое вы хотите?   -  person mico    schedule 05.04.2015
comment
Он отображает дату в будущем, хотя время уже в прошлом. Так, например, если дата 19:00, а текущее время 19:10, будет указано что-то вроде «через час», хотя должно быть 10 минут назад. Я предполагаю, что проблема как-то связана с часовым поясом по умолчанию, но я не могу его изменить, отсюда и этот вопрос.   -  person cgf    schedule 05.04.2015
comment
Да, моим первым действием было бы убедиться, в каком часовом поясе находится вещь.Дата, а затем посмотреть, как она связана с часовым поясом Нью-Йорк.   -  person mico    schedule 05.04.2015
comment
Пожалуйста, покажите несколько реальных примеров данных. Время назад имеет мало общего с часовыми поясами, но вы можете анализировать данные таким образом.   -  person Matt Johnson-Pint    schedule 06.04.2015
comment
Например, у меня есть дата 2015-04-07T00:36:29.000Z в моем поле thing.date, которое используется, как показано в посте выше ^. Текущий час 00:43, но moment.js выводит is an hour вместо 6 minutes ago. Я ничего особенного к этой дате не делаю, просто делаю console.log(thing.date) на выходе 2015-04-07T00:36:29.000Z.   -  person cgf    schedule 07.04.2015


Ответы (2)


Вы говорите использовать angular-moments.js, но не включаете angular-moments.js в свой код.

Смотрите инструкции на https://www.npmjs.com/package/angular-momentjs , там предлагается использовать bower и npm со следующими командами:

Вы можете скачать angular-momentjs по:

  • (предпочтительно) Используя Bower и запустив Bower install angular-momentjs --save
  • Использование npm и запуск npm install angular-momentjs --save

и результат будет:

 <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>

 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>

 <script src="app/bower_components/angular-momentjs/angular-momentjs.js"></script>
person mico    schedule 05.04.2015
comment
Извините, проблема в том, что я не могу изменить часовой пояс, он отображает действительную строку, хотя и говорит 10 минут назад или что-то подобное. - person cgf; 05.04.2015
comment
Может ли это быть связано с непоследовательной проблемой перехода на летнее время, как в stackoverflow .com/questions/17559726/ ? DayLightSaving (DST) в некоторых случаях необходимо обрабатывать отдельно с помощью функции isDST(), как в stackoverflow.com/questions/21918095/ - person mico; 06.04.2015
comment
Хм, я предполагаю, что даже если бы это было так, то все равно пришлось бы изменить время, показанное с через 1 час, на, например, 4 часа назад. У меня проблема в том, что расстояние до этой даты не меняется независимо от того, какой часовой пояс я к ней привязываю. - person cgf; 06.04.2015

Вот мое решение. Блуждал по этому вопросу, пытаясь найти решение. Так вот, если кто-то еще бродит здесь в поисках того же ответа.

Начиная с версии 1.0.0-beta.1 часовой пояс можно установить с помощью сервиса amMoment. Просто внедрите сервис amMoment и вызовите changeTimeZone:

amMoment.changeTimezone('Europe/London');
person Firze    schedule 06.10.2016