Удалить часовой пояс из объекта moment.js

Я использую datetimepicker.js, и функция date возвращает объект moment.js. Он делает это с локальным смещением UTC в нем, и моя исходная дата имеет другое смещение.

Моя первоначальная дата:

2015-10-01T15:00:00.000Z

То, что я показываю на устройстве выбора даты (DD-MM HH:mm):

01-10 15:00

Что я получаю:

2015-10-01T15:40:00+01:00

Что я хочу:

2015-10-01T15:40:00+00:00

Обратите внимание, как я удалил смещение +01 в конце.

Как я могу это сделать, применяя его для любого локального UTC? Это означает, что без необходимости вручную удалить 01 (так как это может быть любое другое локальное смещение в зависимости от местоположения пользователя).

var momentDate = timePicker.data("DateTimePicker").date();
console.log(momentDate.format());
//this prints  2015-10-01T15:40:00+01:00

Ответы

Ответ 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.

Ответ 2

Вам нужно явно указать формат.

Попробуй это:

momentDate.format('YYYY-MM-DDTHH:mm:ss')

это даст результат как

2015-10-01T15: 40: 00

Ответ 3

Не чистое решение, но вы могли бы сделать

momentDate.format('YYYY-MM-DDTHH:mm:ss') + '00:00';

Это приведет к удалению часового пояса, а затем добавит часть "00: 00". Это позволит расширить ответ Matt.

Который дал бы вам

2015-10-01T15: 40: 00 + 00: 00

Ответ 4

самое простое:

let str = "2018-03-20T16:29:35-03:00";
let res = str.substring(0, 19); //2018-03-20T16:29:35
let hi = moment(res).format('LLL')
console.log(hi) //20 de Março de 2018 às 16:29