开发者问题收集

React Native Firebase 日期比较

2021-08-05
222

我试图获取用户加入的日期,该日期在 Firebase 文档中显示如下:

firebase join field

我有这个函数来查询登录的用户并获取数据:

import { auth, firestore } from '../../firebase/fire';

const [userData, setUserData] = useState({});
const user = auth.currentUser;

const GetUserData = async() =>{
    const response = firestore.collection('users').doc(user.uid);
    const observer = response.onSnapshot(docSnapshot => {
        if( docSnapshot.exists ) {
            setUserData(docSnapshot.data());
          }
    }, err => {
      console.log(`Encountered error: ${err}`);
    });
    const unsub = firestore.collection('users').onSnapshot(() => {
        setUserData({});
    });
    unsub();        
}
useEffect(() => {
    GetUserData();
}, [])

这使我能够设置类似 const joined = userData.joined;

控制台日志记录给了我

"nanoseconds": 0,
  "seconds": 1489615200,
}

现在可以通过 .toDate() 将其转换为正常日期,但似乎不起作用。

我尝试过的 使用 toDate() 作为例如:

const joined = userData.joined.toDate();
console.log(joined);

我收到的错误

TypeError:未定义不是一个对象(评估“joined.toDate”)

我的目的是获取该日期,找出现在和那时之间的月份差异并显示出来。

2个回答

设法通过以下方式获取购买日期:

const joined = userData.joined;
const date = joined.toDate().toDateString();
console.log(date);

2017 年 3 月 16 日星期四

Demonix
2021-08-05

您曾提到,控制台记录 joined 日期会以秒和纳秒为单位输出。因此,您是从 Firestore 获取数据。

可以使用 toDate() 函数将此 joined 时间戳转换为日期。它对我来说非常有效。由于您收到错误,因此在您的情况下,当您对 userData.joined 调用 toDate() 函数时,其中可能没有值。为此,正如 Frank van Puffelen 在评论部分中提到的那样,如果您可以编辑问题并以更详细的方式包含运行该代码的位置和时间,则很容易重现。

接下来,您提到您想要获取从现在到 joined 日期之间的月份差。

为此,有很多方法。我希望下面会是一个简单而简短的方法 -

运行以下命令安装 date-fns 库。

npm install -s date-fns

然后按照代码示例进行操作 -

const differenceInMonths = require('date-fns/differenceInMonths');
const today = new Date();
const joined = userData.joined.toDate();
const monthDiff= differenceInMonths(today,joined);
console.log(monthDiff);
Prabir
2021-08-06