' 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 期望 Date
或 number
作为输入,而不是字符串。
我的 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 期望 Date
或 number
作为输入,而不是字符串。