Рассчитать разницу во времени в облачных функциях - PullRequest
0 голосов
/ 25 марта 2019

В моей базе данных Cloud Firestore всегда зарегистрирован пользователь, база данных хранит время, когда происходит событие:

const p = usersReference.add({ 
    ...,
    registerTime: admin.firestore.FieldValue.serverTimestamp(), 
    ...
});

Моя цель - создать еще одну облачную функцию, которая получает пользователя в качестве входного и возвращает, еслис момента регистрации пользователя прошло не менее 5 дней:

export const get_user_timeleft = functions.https.onRequest((request, response) => {
        //useless part of the function...       
            querySnapshot.forEach(function (documentSnapshot) {
                //Here I know that documentSnapshot.data().registerTime 
                //returns whatever is saved in the database.
                //How can I return true or false if there's been 5 
                //or more days since the user registered?
                response.json(TRUE of FALSE);
            })
        }
    })
    .catch(function(error) {
        response.json(error);
    });

});

Я могу снова позвонить admin.firestore.FieldValue.serverTimestamp() и попытаться вычесть их, но я даже не знаю, какой это тип.В прошлом мне удавалось использовать это как Date, но, поскольку Firebase говорит, что Date будет устаревшим, я не знаю, как с этим справиться.

1 Ответ

1 голос
/ 25 марта 2019

Если вы хотите, чтобы в вашей облачной функции для проверки каждого документа, возвращаемого циклом querySnapshot.forEach(), было ли хотя бы 5 дней с момента регистрации пользователя (т.е. today - registerTime > 5), вы можете сделать следующее:

export const get_user_timeleft = functions.https.onRequest((request, response) => {
            //useless part of the function...    

            const nowDate = new Date();

            querySnapshot.forEach(function (documentSnapshot) {
                //Here I know that documentSnapshot.data().registerTime 
                //returns whatever is saved in the database.
                //How can I return true or false if there's been 5 
                //or more days since the user registered?

                const elapsedTime = (nowDate.getTime() - documentSnapshot.data().registerTime.getTime());

                const daysDifference = Math.floor(elapsedTime/1000/60/60/24);

                //Check that the difference is more than 5 and then act accordingly
                //It is not crystal clear from your question if there is only one document in the querySnapshot


            })

    })
    .catch(function(error) {
        response.json(error);
    });

});

В случае, если вы точно знаете, что по запросу возвращается только один документ (что, по-видимому, имеет место в свете комментариев по вашему вопросу), вы можете сделать:

export const get_user_timeleft = functions.https.onRequest((request, response) => {
            //useless part of the function...    

            const nowDate = new Date();
            let daysDifference;

            querySnapshot.forEach(function (documentSnapshot) {
                //Here I know that documentSnapshot.data().registerTime 
                //returns whatever is saved in the database.
                //How can I return true or false if there's been 5 
                //or more days since the user registered?

                const elapsedTime = (nowDate.getTime() - documentSnapshot.data().registerTime.getTime());

                daysDifference = Math.floor(elapsedTime/1000/60/60/24);            

            });

            if (daysDifference > 5) {
                 response.send({ result: true }); 
            } else {
                 response.send({ result: false }); 
            }


    })
    .catch(function(error) {
        response.json(error);
    });

});
...