将字符串转换为日期,然后转换为时间戳以添加到 firestore

Convert String to Date then to timestamp to add to firestore

好的,所以我有两个反应本机组件 DateTimePicker,我使用它们使用以下更改功能从用户那里收集日期和时间

 const onChangeDate = (event, selectedDate) => {
    const currentDate = selectedDate || date;
    setDateShow(Platform.OS === 'ios');
    setDate(currentDate);

    let tempDate = new Date(currentDate);
    let date = tempDate.getFullYear() + '-' + tempDate.getMonth() + '-' + tempDate.getDate();

    console.log(date); //2022-4-18
    setFinalDate(date);
  }
  const onChangeTime = (event, selectedTime) => {
    const currentTime = selectedTime || time;
    setTimeShow(Platform.OS === 'ios');
    setTime(currentTime);

    let tempDate = new Date(currentTime);

    let time = tempDate.getHours() + ':' + tempDate.getMinutes() + ':' + tempDate.getSeconds() + tempDate.getMilliseconds();

    console.log(time); //0:10:00
    setFinalTime(time);
  }

为 finalTime 和 finalDate 设置状态后

const eventTimestamp = (`${finalDate} ${finalTime}`); 
console.log(eventTimestamp) // output is 2022-4-18 0:10:00

我似乎无法将其转换为 date() 对象,然后使用 toMillis() 方法将其转换为时间戳,因为我想将其作为时间戳添加到 firestore 中。 使用 new Date() 将其转换为日期给我 Date { NaN } 并使用 firestore 方法 firebase.firestore.Timestamp.fromDate(works) 给我 Object { “纳秒”:NaN, “秒”:NaN, }

我哪里出错了?

您应该解析日期字符串,然后将其转换为 date() 对象。请参阅下面的示例代码:

// Initiate a new Date object.
const eventTimestamp = new Date(
  // Parse the string into a date
  Date.parse(
    `${finalDate} ${finalTime}`
    )
)

await setDoc(doc(db, "<collection>", "<document-id>"), {
    timestamp: eventTimestamp
});

有关更多信息,您可以查看此 documentation