Ошибка типа: (промежуточное значение).ToDate не является функцией

#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()