Moment: Формат функции обратного вызова Calendar Time возвращает поврежденную строку месяца

Созданный на 28 мар. 2017  ·  3Комментарии  ·  Источник: moment/moment

Я пытался использовать календарное время для форматирования дат, передавая функцию обратного вызова. Однако в условии else моего обратного вызова месяц отформатированной даты неверен.

Jan возвращается как Jamn
Mar возвращается как 3amr
Feb возвращается как F0b

Возможно, я делаю это неправильно, но кажется странным, что месяц вернется таким образом без каких-либо ошибок.

Код для воспроизведения

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');
      }
    }
  });
}

Окружающая обстановка
Вт 28 мар 2017 16:52:21 GMT-0400 (EDT)
28.03.2017, 16:52:21
240
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 56.0.2924.87 Safari / 537.36
2.17.1

Самый полезный комментарий

nevermind - возвращал неправильное значение.

Все 3 Комментарий

nevermind - возвращал неправильное значение.

@dbshwang У меня такая же проблема. не могли бы вы поставить свою резолюцию

@ avi-meslati-sp Вы должны возвращать только строку для форматирования, а не фактическую отформатированную дату. Так что в моем случае:

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

на самом деле должно быть

sameElse: function(now) {
  if (this.isSame(now, 'year')) {
      return 'MMM D';
  } else {
      return 'MMM D, YYYY';
  }
}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги