J'utilise Firestore dans React. Et cette application enregistre created_at datetime en tant qu'objet Timestamp dans Firestore comme ci-dessous. utilisez firebase.firestore.FieldValue.serverTimestamp().

export function createComment(uid, values, count) {
  return dispatch => {
    commentsRef
      .add({
        uid: uid,
        content: values.content,
        created_at: firebase.firestore.FieldValue.serverTimestamp()
      })
      .then(function() {
        roomsRef
          .doc(uid)
          .update({
            comment_count: Number(count) + 1
          })
          .then(() => {
            dispatch({ type: CREATE_COMMENT });
          });
      });
  };
}

Mais l'erreur se produit lorsque j'ai essayé d'afficher l'horodatage created_at.

// Fetch comments
export function fetchComments(uid) {
  return dispatch => {
    commentsRef
      .where("uid", "==", uid)
      .get()
      .then(snapshot => {
        const comments = snapshot.docs.map(doc => {
          return {
            const timstamp = doc.data().created_at.toDate();
            // error occurs
            ...doc.data(),
            id: doc.id,
            timestamp: timestamp
          };
        });
        return comments;
      })
      .then(comments => {
        dispatch({ type: FETCH_COMMENTS, payload: comments });
      });
  };
}

Erreur:

TypeError: Impossible de lire la propriété 'toDate' de indéfini

L'horodatage est récupéré avec succès.

enter image description here

1
k10a 4 févr. 2020 à 06:53

1 réponse

Meilleure réponse

created_At est un objet, comme vous l'avez clairement montré dans le journal. Si vous souhaitez le convertir en date, choisissez l'un des champs. Ainsi, created_at.nanoseconds vous donnera un horodatage que vous pouvez convertir.

Je ne sais pas ce qu'est toDate(), ce n'est pas une méthode js native, faites-vous référence à moment js ? Si vous souhaitez convertir un horodatage en date, vous devriez essayer new Date(created_at.nanoseconds)

2
Josh Pittman 4 févr. 2020 à 06:13