Во-первых, я надеюсь, что это не дубликат. Я прочитал много подобных вопросов, но не могу найти один с этой конкретной проблемой.Компенсация за utcOffset в Moment.js
У меня есть japcript datepicker, который использует дату javascript внутри, которая имеет непреднамеренный побочный эффект. Когда я выбираю 30 апреля 2016 года, он возвращает объект даты в полночь (00:00) в эту дату, но если вы находитесь в другом часовом поясе и он использует UTC внутренне, он возвращает объект, который компенсирует смещение UTC. Итак, потому что это BST здесь, я вернусь, это 30-го апреля 00:00 GTM + 1:00, которое, когда вы превращаете его в строку ISO, на самом деле 23:00 29 апреля.
Я хочу послать правильную дату (30 апреля, нет времени) на сервер, но строку даты я в настоящее время получить при этом:
var newDate = moment(newValue).toISOString();
console.log(newDate);
это:
2016-05-19T23:00:00.000Z
Итак, мое понимание об этом слабое, но я думаю, что datepicker использует мое местное временное смещение изначально, чтобы взять час, если и хранить 23:00 19-го числа в качестве даты UTC внутри, так что это уже дата UTC, конвертируя в UTC не поможет.
Что мне нужно сделать, это использовать moment.js, чтобы компенсировать utcOffset и сдвинуть дату так, чтобы было полночь в дату, которую я выбрал в UTC.
Итак, чтобы уточнить, ваш дампинг дает вам собственный объект даты JS. Значение UTC этого объекта даты - это значение, которое вы хотите, чтобы Moment интерпретировал как локальное время? –
Нет, все наоборот. Почему бы не просто позвонить .format («ГГГГ-ММ-ДД») в свой момент? В приведенном выше сценарии вы получите «2016-05-20», если вы находитесь в британском летнем времени. –
Он хранит дату UTC 19-го числа в 23:00. Преобразование его в iso дает мне это как строку, которую я не хочу. Тем не менее, javascript видит это как полночь 20-го, и использование .format() действительно дает мне строку, которую я хочу с 20-м, предположительно потому, что javascript видит дату как 20-е, потому что она автоматически добавляет в мое смещение. Мне показалось странным, что .toISOString() преобразует дату UTC в строку, но .format() будет форматировать локальную дату. Ваш ответ правильный, хотя, если вы выразите его как ответ, я сделаю это правильно. – jonhobbs