【问题标题】:How to get the timestamp from servervalue?如何从 servervalue 获取时间戳?
【发布时间】:2018-08-30 22:04:24
【问题描述】:

我正在尝试使用以下代码从 firebase 获取服务器时间:

let timestamp = ServerValue.timestamp()
let today = NSDate(timeIntervalSince1970: timestamp/1000)

但这给了我一个错误提示:

二元运算符“/”不能应用于“[Any Hashable: Any]”和“Int”类型的操作数

为什么ServerValue.timestamp() 不返回 TimeIntervel 值? 如何获取服务器的本地时间?

【问题讨论】:

  • 什么是服务器价值?可以分享一下吗?
  • 根据您的错误,它可能是字典。对吗?
  • @Adolfo 我在发帖之前已经阅读了这篇文章。但这个问题是两年前发布的,我尝试了解决方案。
  • 您需要先将其从字典中取出,然后才能对其进行操作。我们需要查看ServerValue.timestamp() 的实际返回值,以表明您希望您需要做的正是。

标签: ios swift firebase server timestamp


【解决方案1】:

我不确定如何从 servervalue 获取时间戳,但由于您用于创建日期的 convenience init(timeIntervalSince1970 secs: TimeInterval) 期望秒数为 Double 的 TimeInterval 并传递您是,因此引发了错误试图划分一个不允许的类型(timestamp/1000)。

下面是一个例子,说明你的 double 值应该如何工作

let unixTimestamp = 1480134638.0
let date = Date(timeIntervalSince1970: unixTimestamp)

print(date) -> "2016-11-26 04:30:38 +0000\n"

【讨论】:

  • 很遗憾,此信息与问题或错误无关;该错误表明除法符号“/”不能用于字典 [Any Hashable: Any] 除以 Int。但是,您对 Double 的评论是正确的。
【解决方案2】:

您不能使用ServerValue.TIMESTAMP 获取 Firebase 的服务器时间。

当您将其写入文档时,它会映射到服务器时间的 Firestore 时间戳值。

如果你想要服务器时间,有两种方法。

  1. ServerValue.TIMESTAMP 写入 Firestore 中的临时文档并从那里读取。

  2. 使用 Google Cloud 函数在 response.end() 方法中以字符串形式获取 Date() 对象的实例。像这样创建一个 HTTP 端点。然后,您可以使用 AJAX 请求来获取结果。

const app = (req, res) => { // this will return the Firebase server time res.send(new Date()); };

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2018-02-12
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多