Я пытался использовать календарное время для форматирования дат, передавая функцию обратного вызова. Однако в условии 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 - возвращал неправильное значение.
@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';
}
}
Самый полезный комментарий
nevermind - возвращал неправильное значение.