#json #reactjs #firebase #google-cloud-firestore #timestamp
#json #reactjs #firebase #google-облако-firestore #временная метка
Вопрос:
Я пытаюсь отобразить значение метки времени из моей коллекции firestore, но я получаю эту ошибку «TypeError: (промежуточное значение).ToDate — это не функция», которую я пометил символом «>>» ниже. Я сделал это временной меткой перед отправкой в firestore, но теперь, чтобы отобразить ее, мне нужно это как значение даты У вас есть какие-либо решения?
componentDidMount() {
db.collection("mycollection")
.get()
.then(querySnapshot => {
const data = querySnapshot.docs.map(doc => doc.data());
this.setState({ costumers: data });
});
}
render(){
const { costumers } = this.state;
return (
<Card
>
<PerfectScrollbar>
<Box minWidth={1050}>
<Table >
<TableHead>
<TableRow>
<TableCell padding="checkbox">
</TableCell>
{costumers.map(costumer => (
<TableBody>
<TableRow
>
<TableCell padding="checkbox">
<Checkbox
value="true"
/>
</TableCell>
<TableCell>
<Box
alignItems="center"
display="flex"
>
<Typography
color="textPrimary"
variant="body1"
>
{costumer.name}
</Typography>
</Box>
</TableCell>
<TableCell>
{costumer.surname}
</TableCell>
<TableCell>
{costumer.email}
</TableCell>
<TableCell>
{costumer.phone}
</TableCell>
<TableCell>
>> {new Date(costumer.date).toDate()}
</TableCell>
<TableCell>
{costumer.time}
</TableCell>
<TableCell>
{costumer.service}
</TableCell>
</TableRow>
</TableBody>
))}
</Table>
Комментарии:
1. Вы пытались утешить. записать значение costumer.date ? Также вы создаете приложение для людей в костюмах или клиентов? 😉
Ответ №1:
Вы можете легко получить временную метку с самого сервера Firebase, используя следующий код.
import firebase from 'firebase';
var TimeStamp = firebase.firestore.FieldValue.serverTimestamp();
serverTimestamp()
Функция вернет временную метку с самого сервера firebase. Здесь значение TimeStamp
будет в этом формате :
<Full name of the month> dd, yyyy hh:mm:ss <Time zone of your location>
Если вы хотите отобразить дату, вы можете просто отобразить ее в виде строки. Вы не можете отобразить значение даты внутри <TableCell>
. Вы должны преобразовать его в строку.
РЕДАКТИРОВАТЬ Когда вы получаете значение метки времени, оно уже будет в формате даты. Вы должны использовать toDateString()
для преобразования его в строку.
Ответ №2:
Сначала вам нужно умножить значение метки времени на 1000, а затем обернуть значение метки времени в новую функцию даты следующим образом:
new Date(post.timestamp?.seconds * 1000)
Затем вы должны вызвать функцию toDateString для объекта date:
new Date(post.timestamp?.seconds * 1000).toDateString()