Ответ 1
Похоже, вы пытаетесь заставить пользователя выбрать дату и время, основанную на UTC. Поэтому лучшим способом было бы, чтобы сборщик работал в режиме UTC, когда он создает момент для начала. Я не знаком с этим конкретным datetimepicker, но, предполагая, что где-то внутри, он делает что-то вроде этого:
var m = moment([year, month-1, day, hour, minute]);
Тогда вместо этого нужно сделать следующее:
var m = moment.utc([year, month-1, day, hour, minute]);
(Переменные, показанные здесь, будут поступать из элемента управления выбора.)
В идеале, управление сборщиком должно включать в себя функцию для установки режима UTC, чтобы он мог делать это внутренне, когда вам сказали.
Если у него нет такой функции, вы все равно можете компенсировать себя. К сожалению, вы не можете просто вызвать .utc()
, поскольку это даст другое время, чем тот, который выбрал пользователь. Таким образом, вам придется компенсировать, сдвинув время UTC на исходное смещение момента.
var m = // moment value from the picker
var result = moment(m).utc().add(m.utcOffset(), 'm');
После этого вы можете вызывать format
или все, что пожелаете. Обратите внимание, что исходный момент клонируется с moment(m)
, так что смещение не теряется, а переключатель в UTC не влияет на внутреннее поведение сборщика.
Кроме того, обратите внимание, что перемещение, как это, обычно является взломом, и если это сделано неправильно, это может привести к ошибкам. Здесь это нормально, потому что момент уже включен в UTC, когда применяется регулировка. Но в качестве общего решения следует избегать смещения. Лучшим вариантом является включение элемента управления в режим UTC.