2015-06-22 3 views
42

У меня возникла проблема, когда мне нужно сохранить начальные значения объекта-объекта, но у меня есть некоторые проблемы с тем, чтобы моя переменная не менялась вместе с исходным объектом.Как работать с изменчивостью в moment.js?

К сожалению Object.freeze() не работает, поскольку момент.js возвращает ошибку «Недействительная дата» при попытке форматировать это.

+3

И код выглядит как ...? Если вы хотите сохранить начальное значение, сохраните значение времени, доступное с помощью метода * valueOf * или неявного преобразования в число. – RobG

+0

как только ваша переменная установлена, она установлена, она не будет изменяться автоматически, поэтому скорее не ставьте ее снова и снова –

ответ

67

Плагин Moment.js на NPM под названием frozen-moment - Вы можете использовать moment().freeze() вместо Object.freeze(moment()).

В противном случае, ваниль Moment.js имеет метод clone, который должен помочь вам избежать проблем Изменчивость, так что вы могли бы сделать что-то вроде этого:

var a = moment(), 
    b = a.clone(); // or moment(a) 

UPDATE:

Это было два года так как я написал этот ответ. В это время появилась еще одна библиотека для работы с датами: https://date-fns.org/

Эта библиотека неизменна по умолчанию и соответствует модульной функциональной архитектуре, что означает, что она лучше подходит для дрожания деревьев и взаимодействия с клиентами, боковое связывание. Если вы работаете над проектом, который широко использует Webpack на стороне клиента и обнаруживает, что Moment.js дает вам проблемы с вашей сборкой или даже если изменчивость Moment.js вызывает у вас много головной боли, тогда вы должен дать date-fns.

+0

Ну, я использую moment.js в плагине fullCalendar, и, оказывается, я получаю моментный объект данные из более позднего состояния моего события, чем я предполагал. Проблемы с совместимостью, безусловно, вещь с moment.js, хотя, поэтому большое спасибо за предложение и жаль, что я потратил ваше время. – Shengbo1618

+7

Вы можете манипулировать сохраненной переменной 'moment', не изменяя ее: просто используйте clone() следующим образом: ' zz = moment(); zz.clone(). Add (3, 'h'). ToISOString(); ' – Quake1TF

+0

выше комментарий помог, спасибо большое! – jones

Смежные вопросы