Как я могу добавить или вычесть значение Moment JS в React Native State? - PullRequest
1 голос
/ 17 апреля 2019

Поэтому мой вопрос заключается в том, как мне получить свое состояние (дату) для добавления или вычитания значения из него.

Я говорю о приложении React Native и использую в нем Moment.js.


state = {
    date: this.props.navigation.getParam("date")
  };

это мое состояние даты, и оно правильно показывает пройденный бросок React-Navigation и работает нормально.

  dateBackHandler=()=>{
    Moment(this.state.date).subtract(1, "d")
  }

  dateForwardHandler=()=>{
    Moment(this.state.date).add(1, "d")
  }

это две мои функции, которые манипулируют состоянием и которые должны добавить иливычтите из него день.

Моя проблема в том, что я получаю ошибку:

Предупреждение об устаревании: предоставленное значение не соответствует распознанному формату RFC2822 или ISO.момент конструирования возвращается к js Date (), который не надежен во всех браузерах и версиях.

Я нажал на ссылку и прочитал документы Moment.js.

Мне нужноспособ вызова моих функций в моем текущем состоянии.

РЕДАКТИРОВАТЬ: Кто-нибудь знает, как мой setState должен выглядеть внутри функции?

РЕДАКТИРОВАТЬ: Передавая дату без формата, мои функции фактически работают, и они меняют день, но это выглядит некрасиво из-за формата, который отображается.

Ответы [ 4 ]

1 голос
/ 17 апреля 2019

Это не ошибка, это предупреждение. Проблема в том, что this.state.date находится в формате, который момент не распознает. Отправьте это что-нибудь в формате ISO (I.E. 2019-04-15T00:00:00Z). Такие вещи, как 19-04-15 или 15/04/2019 не являются действительными значениями для момента)

0 голосов
/ 18 апреля 2019

Предупреждение относится к формату даты, которую вы передаете моменту, т.е. this.state.date находится в формате, который момент не распознает, поэтому при передаче this.state.date к моменту также передайте формат даты вместе с ним как запятую разделены. Например: moment('17-04-19',"DD-MM-YY").

Проверьте следующее console.log в вашем коде:

 console.log(moment('17-04-19',"DD-MM-YY").subtract(1, "d").format('DD-MM-YY')); 
 // this will print --> 16-04-19

Итак, ваша функция может потребоваться изменить, чтобы получить действительный формат даты из вашего формата state.date следующим образом:

 dateBackHandler=()=> {
   Moment(this.state.date, "DD-MM-YY").subtract(1, "d") // assuming your state.date is in format "DD-MM-YY"
 }

 dateForwardHandler=()=>{
   Moment(this.state.date, "DD-MM-YY").add(1, "d") // assuming your state.date is in format "DD-MM-YY"
 }

Надеюсь, это поможет!

0 голосов
/ 18 апреля 2019

Хорошо, это может быть потому, что я получаю его как 17-04-19, вы знаете, как преобразовать его обратно? R // вы можете использовать подстроку, извините, я не могу комментировать

var date = "20" + x.substring(6,8) + "-" + x.substring(3,5) + "-" + x.substring(0,3) + "00:00:00Z"
0 голосов
/ 17 апреля 2019

Вы можете изменить форматирование даты на совместимый формат, а затем изменить его обратно на то, что вам нужно:

moment(moment(this.state.date).add(5,'d').format('YYYY-MM-DD')).format('YYYY-MM-DD')
...