Момент возврата JS — isAfter .isAfter не является функцией?

#javascript #reactjs #momentjs

#javascript #reactjs #momentjs

Вопрос:

У меня проблема внутри моего компонента React. Я пытаюсь показывать только те данные, которые появятся в будущем или только сегодня. Но я получаю эту ошибку:

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

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

Короче говоря: я хочу отображать только предстоящие события.

мой код:

 showData = () =&&t; {
    const { checks } = this.props;

    return (
        this.state.openda&en.len&th &&t; 0 amp;amp;
        this.state.openda&en.map((value, index) =&&t; {
            const { openda&_data: datum } = value;
            const date = Moment(datum, 'DD/MM/YYYY').format('DD/M/YYYY');
            const now = Moment().format('DD/M/YYYY');

            console.lo&('vandaa&:', now, 'data:', date);

            const concatData = [
                ...(value.openda&_department   ' - '),
                ...(value.openda&_data   ' - '),
                ...value.openda&_link,
            ];

            return date.isAfter(now) ? (
                <tr key={index}&&t;
                    <td data-th="Datum"&&t;{value.openda&_data}</td&&t;
                    <td data-th="Opleidin&"&&t;
                        <stron&&&t;{value.openda&_department}</stron&&&t;
                    </td&&t;
                    <td data-th="Link"&&t;
                        <a
                            tar&et="_blank"
                            rel="noopener noreferrer"
                            href={value.openda&_link}&&t;
                            bekijk website
                        </a&&t;
                    </td&&t;
                    <td data-th="Select"&&t;
                        <CheckBox
                            thisClassName="data__checkbox checkbox__input"
                            value={concatData.join('')}
                            id={'strin&_'   index}
                            onChan&e={checks}
                        /&&t;
                    </td&&t;
                </tr&&t;
            ) : null;
        })
    );
};
  

Комментарии:

1. При вызове format вы превращаете момент в строку. Попробуйте удалить .format('DD/M/YYYY') и посмотрите, сработает ли это вместо этого.

2. Используйте Moment(date, 'DD/M/YYYY').isAfter(now) для преобразования stin& в объект moment.

Ответ №1:

date переменная не является moment объектом, поскольку вы использовали format здесь

 const date = Moment(datum, 'DD/MM/YYYY').format('DD/M/YYYY');
  

метод format объекта moment возвращает форматированную строку, поэтому ваша date переменная — это просто строка.

Ответ №2:

Moment().format() вернет строку. Строка не будет отвечать на isAfter() .

Вам нужно либо присвоить вашу отформатированную дату другой переменной, либо просто отформатировать ее в том месте, в котором вы хотите ее отобразить:

 const date = Moment(datum, 'DD/MM/YYYY');
const now = Moment();

return date.isAfter(now) ? ( // <-- this now works 
  ...