【问题标题】:convert timestamp to pubnub timestamp of 17-digit precision unix time (UTC)将时间戳转换为 17 位精度 unix 时间 (UTC) 的 pubnub 时间戳
【发布时间】:2016-02-12 09:28:23
【问题描述】:

我正在尝试将时间戳 2016-02-11 03:31:18 转换为 17 位精度 unix 时间 (UTC) 的 pubnub 时间戳,类似于 pubnub 给出的参考网址中给出的 13406746780720711 我试过关注但没有运气

function parseDateTime(s) {
  var b = s.split(/\D/);
  return new Date(b[0],b[1]-1,b[2],b[3],b[4],b[5])
}
date = new Date(parseDateTime("2015-02-11 02:10:54") / 10000);
console.log(date.getTime());//142360085

上面的例子给出了输出142360085,它是 10 个字符,其中 pubnub 要求 17 位时间戳。

这样做的原因是我想获取特定用户的未读消息并通过电子邮件在 EOD 发送电子邮件。

将 mytimestamp 转换为 17 位精度的 unix 时间 (UTC) 后,我会将其传递给 pubnub history function 并获得未读消息。

【问题讨论】:

标签: pubnub


【解决方案1】:

将 Unix 时间戳转换为 PubNub 时间令牌 17 位精度

如鱼得水:timestamp * 10000

PHP 除外。 ❌ PHP ❌ 不支持这种级别的整数精度!您可以改为使用字符串连接和强制转换。

$tt = $unixtime_milliseconds . "0000";

您的 unix 时间必须以毫秒精度表示,没有分数/没有浮点数

使用 JavaScript 试试这个例子。

// Vars
var timestamp   = +new Date;
var unix_time   = document.getElementById("unix-timestamp");
var pubnub_time = document.getElementById("pubnub-timetoken");

// Conversion
function unix_to_pubnub(time) {
    return time * 10000;
}

// Update Time
unix_time.innerHTML   = timestamp;
pubnub_time.innerHTML = unix_to_pubnub(timestamp);
<span id="unix-timestamp"></span> - Unix Timestamp <br>
<span id="pubnub-timetoken"></span> - PubNub Timetoken

【讨论】:

  • 函数 parseDateTime(s) { var b = s.split(/\D/); return new Date(b[0],b[1]-1,b[2],b[3],b[4],b[5]) } var timestamp = parseDateTime("2015-02-11 02: 10:54"); var unix_time = document.getElementById("unix-timestamp"); var pubnub_time = document.getElementById("pubnub-timetoken"); // 转换函数 unix_to_pubnub(time) { return time * 10000; } // 更新时间 unix_time.innerHTML = timestamp; pubnub_time.innerHTML = unix_to_pubnub(时间戳); @PubNub 你能检查一下代码吗?我的意思是我在做什么是正确的?我在这里传递日期而不是日期对象。如有错误请指正。
  • 在上面的评论中,我正在尝试将日期(字符串)转换为 pubnub 时间令牌,从而产生 14236008540000000 - PubNub 时间令牌,我希望这是正确的。
  • 是的,没错。它不会匹配该频道历史记录中的消息,但会根据您使用的参数(开始或结束)在该时间标记之前或之后返回结果。
  • 不!它不适合我! :( 即使我也尝试过使用 php sdk 但没有运气,请查看stackoverflow.com/questions/35451863/…希望你能有所帮助。
  • 不幸的是,此答​​案与 PubNub 历史 API 调用冲突,因为如果使用人为以 ' 结尾的“最后读取”时间标记,您不再排除(开始)或包含(结束)历史条目0000.'
【解决方案2】:

在 Android 中获取当前时间令牌

  static Long getCurrentHourToken() {
        return (Calendar.getInstance().getTimeInMillis()) * 10000L;
    }

    static Long getBeforeHourToken(int hours) {
        return (Calendar.getInstance().getTimeInMillis() - TimeUnit.HOURS.toMillis(hours)) * 10000L;
    }

【讨论】:

    【解决方案3】:

    在 iOS 中如何获取当前时间戳。这是为 PubNub 编写的。

     static func currentTimeInMilliSeconds()-> CUnsignedLongLong {
               let currentDate = Date()
               let since1970 = currentDate.timeIntervalSince1970
               return CUnsignedLongLong(since1970 * 1000)
           }
    

    【讨论】:

    • 这是不正确的。 PubNub 使用Int64(self / 10_000_000) 将 Timetoken 转换为日期。所以在另一个方向,我们需要这样做Int64(date.timeIntervalSince1970 * 10_000_000)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2016-06-11
    • 1970-01-01
    • 2013-04-07
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多