Moment: O formato da função de retorno de chamada da hora do calendário retorna uma string de mês corrompida

Criado em 28 mar. 2017  ·  3Comentários  ·  Fonte: moment/moment

Eu estava tentando usar o tempo do calendário para formatar minhas datas, passando uma função de retorno de chamada. No entanto, na condição else do meu retorno de chamada, o mês da data formatada está incorreto.

Jan devolvido como Jamn
Mar devolvido como 3amr
Feb devolvido como F0b

Posso estar fazendo isso errado, mas parece estranho que o mês tenha voltado assim sem lançar erros.

Código para reproduzir

export const dateConversion = (date) => {
  // Assuming date comes in 'YYYY-MM-DD` format
  date = moment(date, 'YYYY-MM-DD');
  return date.calendar(null, {
    sameDay: '[Today]',
    nextDay: '[Tomorrow]',
    lastDay: '[Yesterday]',
    nextWeek: 'ddd',
    lastWeek: 'MMM D',
    sameElse: function(now) {
      if (this.isSame(now, 'year')) {
        return this.format('MMM D');
      } else {
        // Month is incorrectly parsed here 
        return this.format('MMM D, YYYY');
      }
    }
  });
}

Ambiente
Terça-feira, 28 de março de 2017 16:52:21 GMT-0400 (EDT)
28/03/2017, 4:52:21 PM
240
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 56.0.2924.87 Safari / 537.36
2.17.1

Comentários muito úteis

deixa pra lá - estava retornando o valor errado.

Todos 3 comentários

deixa pra lá - estava retornando o valor errado.

@dbshwang, estou tendo o mesmo problema. você pode por favor colocar sua resolução

@ avi-meslati-sp Você deve retornar apenas a string para formatação - não a data real formatada. Então, no meu caso:

sameElse: function(now) {
  if (this.isSame(now, 'year')) {
      return this.format('MMM D');
  } else {
      return this.format('MMM D, YYYY');
  }
}

deveria realmente ser

sameElse: function(now) {
  if (this.isSame(now, 'year')) {
      return 'MMM D';
  } else {
      return 'MMM D, YYYY';
  }
}
Esta página foi útil?
0 / 5 - 0 avaliações