【问题标题】:Check and compare times of messages in Firebase Swift检查和比较 Firebase Swift 中的消息时间
【发布时间】:2019-04-25 14:28:53
【问题描述】:

我想要做的是我有一个用 Swift 制作的消息应用程序,并且我使用 Firebase 作为我的数据库。我正在尝试做的是拥有像 Snapchat 中那样消失消息的功能;但是,我不完全确定我应该如何做到这一点。我在数据库中的消息上有一个时间戳,但我不确定如何使用它。 This 是我想要做的,我只是不知道它的确切代码。

这是我的数据库结构的图片。如果您需要更多信息,请告诉我。谢谢

【问题讨论】:

  • 您需要使用(NS)DateFormatterdate(即String)转换为(NS)Date 对象。很快,dateFormat 似乎是yyyyMMddHHmmss。但由于它采用特定格式,您还可以使用该格式将 Date() 转换为 String 并比较 String(例如,除非您想要“在 n 秒内过期”)。
  • @Larme 你介意给我一个代码示例,我如何检查日期并进行比较,以便 24 小时后所有消息都会消失?
  • 您想在邮件过期时从数据库中删除它还是不想显示它?
  • @Alexander 是的,我想从数据库中删除它
  • @Jaqueline 您可能想要设置一个 cron 作业。 firebbase 有一个很棒的教程。 firebase.googleblog.com/2017/03/…

标签: swift firebase firebase-realtime-database nsdate


【解决方案1】:

我建议通过 自 1970 年 1 月 1 日以来的毫秒数 来管理您在 Firebase 中的时间戳,方法是在 Swift 中使用 NSDate().timeIntervalSince1970 * 1000,然后在用 JavaScript 编写的 cron 作业中使用 Date().getTime();。您可以在创建每个帖子时将let date = Int64(NSDate().timeIntervalSince1970 * 1000) 存储在firebase 中的date 节点下。然后,您可以使用 Firebase Functions 和 Google Cloud 创建一个 cron 作业,该作业每小时运行一次,查询帖子并删除时间戳超过一天的 date 帖子。

这是一个关于如何开始使用 cron 的精彩教程:https://firebase.googleblog.com/2017/03/how-to-schedule-cron-jobs-with-cloud.html

您的 cron 作业需要在 node.js 中编码,看起来像这样:

// example cron job after setting everything up in the tutorial
    exports.hourly_job =
        functions.pubsub.topic('hourly-tick').onPublish((event) => {
        // get current date and time
        var currentDate = new Date();
        console.log("Hourly Deletion Ran at: " + currentDate);
        var currentNumMilliseconds = currentDate.getTime();
        // remove a days worth of time
        var oneDayAgo = currentNumMilliseconds - (3 * 24 * 60 * 1000);
        var cutoffDate = new Date(oneDayAgo);
        console.log("Query start at date: " + oneDayAgo);
        // the firebase database ref where your posts are stored
        const ref = admin.database().ref('posts');
        // query all posts more than a day old
        ref.orderByChild('date').startAt(oneDayAgo).once('value').then(function (snapshot) {
            // for each snapshot returned from the query that is older than one day, delete
            snapshot.forEach(function(childSnapshot) {
                var key = childSnapshot.key;
                var postObject = childSnapshot.val();   
                ref.child('key').remove();
            });

        });
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多