Я думаю, что я понял: moment("iso8601_string")
анализирует/преобразует эту строку в локальное время. В моем случае я нахожусь в часовом поясе UTC + 2, поэтому строки синтаксического анализа содержат "+02:00"
(или "+01:00"
), а затем вызов .date()
возвращает 22, потому что время, сохраненное в моментном объекте, совпадает с моим местным временем.
Однако при разборе строки, например. "+07:00"
, время, сохраненное в объекте момента, будет моим местным временем, и в этом случае дата на самом деле будет отличаться, за день до этого.
Я также считаю, что мое первоначальное требование было свернуто и основано на неправильном допущении. Мой случай использования состоял в том, что я получил datetime из некоторого виджета пользовательского интерфейса всегда, как дата + время, но мне нужна была только дата. Написание единичного теста, который анализировал строку, содержащую "+07:00"
, заставлял дату быть «неправильной». Однако это было неверное предположение, потому что (по крайней мере, в моем случае использования) datetime из виджета пользовательского интерфейса всегда будет в локальное время, поэтому код никогда не будет анализировать строку, содержащую "+07:00"
.
Я не уверен, что вариант использования, как я первоначально заявлено не существует в реальном мире:
- вы получите строку, содержащую дату в другом часовом поясе
- вам нужно взять дату из-за этого, но в часовом поясе этой даты (почему?)
Я предполагаю, что обычно, когда вы получаете дату откуда-то, удаленное соглашение должно всегда получать UTC, таким образом точка отсчета ясна, и вы можете преобразуйте его дальше локально. Поэтому, вероятно, случай, когда вы получаете дату в случайном часовом поясе и нуждаетесь в дате от нее, в этот часовой пояс, не является обычным явлением. Тем не менее, как академический вопрос, я не знаю, как я смогу получить дату из этого в таком случае :)
Вы используете старую версию? Я только что проверил обе эти строки, и для них было равно 21. – chazsolo
Возможный дубликат [Moment.js round date up] (http://stackoverflow.com/questions/28612525/moment-js-round-dates-up) – janfoeh
Думаю, что я понял, chazsolo вижу мой ответ ниже, почему это возвращает 21 для обоих в вашем случае. –