' TypeError: [Variable].getDay is not a function

' TypeError: [Variable].getDay is not a function

我的 React 组件需要时差。我已经将 MobX 用于我的状态 management.Some 部分代码:

  <Icon name='clock' /> Expiry Date :- {format(books.returnDate, 'eeee do MMMM')}
  <Icon name='hourglass start' />Remaining Time:- {timeDiff(books.returnDate)}

以上代码中books.returnDate绑定成功。现在我需要 books.returnDate 和当前日期之间的时差,所以我调用了一个函数 timeDiff

const timeDiff = (t2: Date) => {

        const t1 = new Date();
        console.log(t1.getDay())

        var d2 = t2.getDay();
        var d1 = t1.getDay();

        return (d2 - d1) / (24 * 3600 * 1000);
    }

在 timeDiff 函数中,两个日期的值是:-

但是没有计算差值。我收到一个错误:

[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[observer(LibrarianManager)]' TypeError: t2.getDay is not a function

如何在几天内找到这个差异?

您打错了getDay。应该是console.log(t1.getDay())

这是假设 books.returnDate 来自您的后端,可能是 JSON 响应的一部分。您可能只是忘了将它从字符串转换为日期,因为 JSON 无法存储实际的日期对象。

所以当你做这样的事情时:

const { data } = await axios.get('/api/books');
setState({books: data.books});

你只需要做:

const { data } = await axios.get('/api/books');
setState({books: data.books.map((book) => {
    book.returnDate = new Date(book.returnDate);
})});

或者你可以这样做:

const timeDiff = (t2: Date) => {
    if (!(t2 instanceof Date)) t2 = new Date(t2);
    const t1 = new Date();
    console.log(t1.getDay)

    var d2 = t2.getDay();
    var d1 = t1.getDay();

    return (d2 - d1) / (24 * 3600 * 1000);
}

您似乎已经在使用 date-fns 或一些类似的库。如果是这样,那么您不需要自己发明东西,只需使用库中的适当函数即可,例如:

import differenceInHours from 'date-fns/differenceInHours'

differenceInHours(dateLeft, dateRight)

更多:https://date-fns.org/docs/differenceInHours

请注意,date-fns v2 期望 Datenumber 作为输入,而不是字符串。