5/6位数字时间戳是什么格式,如何转换?

时间:2018-09-06 12:52:13

标签: php timestamp ratchet

使用Ratchet WebSocket,我正在尝试显示已发送消息的时间戳。我在onmessage回调中console.log(e)内有一个对象:

{
    //... rest of the keys
    timeStamp: 353443
}

考虑到我是在13:48发送的,因此我认为它看起来很奇怪。奇怪的是,之前,我在最后一个小时内发送了一个请求,它返回了一个5位数的timeStamp,这使我的研究更加困难。

我尝试在Ratchet文档中寻找该字段,但找不到任何东西。我立即尝试通过在线转换来查看它是否是UNIX时间戳,但是所有值都返回

  

1970年1月1日some:time

如何将返回的时间戳转换为d/m/y H:i?我找不到任何可能的格式或如何转换的信息。

目前(在我的jQuery中):

new Date(data.timeStamp*1000)

但是它返回1月1日的东西。

我已经尝试了两次:

  

2018年9月6日,星期四14:03 :(秒大约是13秒)
  2018年9月6日星期四14:19:24

这分别产生了这些时间戳:

  

0 1 2 3 3 8 4
  2 1 9 5 6 8 3

(显示中没有空格)

(注意:输出的前导0不在-仅用于列比较)

我尝试比较两者,除了分钟和秒以外的所有内容都应该相同,但是-只有两列匹配。

我可能以为是这样(但事实证明,它不能基于结果的不同):

  

根据编码器是否将星期日或星期一设置为0,星期四可能是3或4。

     

6th在逻辑上应该只等于6

     

如果jan = 0,则9月可能是8

     

2018年可能是18

     

如果12小时的标志设置为am / pm,则14可能是2

这是我的Chat.php类:

<?php
    namespace App;

    use Ratchet\MessageComponentInterface;
    use Ratchet\ConnectionInterface;

    class Chat implements MessageComponentInterface
    {
        protected $clients;

        public function __construct()
        {
            $this->clients = new \SplObjectStorage;
        }

        public function onOpen(ConnectionInterface $conn)
        {
            $this->clients->attach($conn); # store new con to send msg later
            echo 'New Connection! '. $conn->resourceId ."\n";
        }

        public function onMessage(ConnectionInterface $from, $msg)
        {
            $numRecv = count($this->clients) - 1;

            echo sprintf(
                'Connection %d sending message "%s" to %d other connection%s'. "\n",
                $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's'
            );

            foreach ($this->clients as $client)
            {
                if ($from !== $client) {
                    $client->send($msg); # sender is not receiver, send to each client connected
                }
            }
        }

        public function onClose(ConnectionInterface $conn)
        {
            $this->clients->detach($conn); # con is closed, rm it, can no longer send it a msg
            echo 'Connection '. $conn->resourceId .' has disconnected'. "\n";
        }

        public function onError(ConnectionInterface $conn, \Exception $e)
        {
            echo 'An error has occurred: '. $e->getMessage() ."\n";
            $conn->close();
        }
    }

和我的chat-server.php

<?php
    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use App\Chat;

    require dirname(__DIR__). '/vendor/autoload.php';

    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new Chat()
            )
        ),
        8080
    );

    $server->run();

链接到项目:http://socketo.me/

我已经根据数字进行了一些数学运算:

  

2195683-123384 = 2072299

     

14:03:13和14:19:24之间的差异是16分11秒

以某种方式,16分钟11秒必须大致等于2072299

大更新

好,所以我比较了4个新日期:

  

2018年9月6日星期四15:26:40

     

2018年9月6日星期四15:31:03

     

2018年9月6日星期四16:26:40

     

2018年9月6日星期四16:31:03

我有一个理论,就是时间可能是从某个时间开始的,所以26:40将始终与从小时开始的X微秒相同。结果如下:

  

2018年9月6日星期四15:26:40
    40491

     

2018年9月6日星期四15:31:03
    303762

     

2018年9月6日星期四16:26:40
    1351367

     

2018年9月6日星期四16:31:03
    1614388

我决定找出它们之间的区别,两者之间相距4分钟23秒,但是这样做:

  

303762-40491 = 263271

  

1614388-1351367 = 263021

相差250。

我还比较了两者的时差:

  

1351367-40491 = 1310876

  

1614388-303762 = 1310626

又相差250。

因此没有时间是相同的,这使我怀疑它确实是从某个时间开始而不是现在的时间。

然后我决定每隔1秒执行一次:

  

21 = 2232366

     

22 = 2233365

     

23 = 2234333

前4位数字会以人们期望的方式(以1秒为单位)递增,但随后分别为66、65、33 ...这是如何产生的?

谢谢

1 个答案:

答案 0 :(得分:2)

由于@Michel的评论,我设法弄清楚了。

我去了timeago jquery插件项目页面,它显示它是从连接中提取的,就像Michel所说的那样。

从服务器连接时间开始-进行我的测试:

  

在9:08:00启动脚本

     

用户1在9:09:00连接

     

用户2在9:12:00连接

     

消息1在9:19:00

     

消息2在9:20:00

消息1返回的时间戳记为:653905

消息2返回的时间戳记为:713738

将毫秒转换为分钟时,第一个产生10分钟,而后者返回11分钟。

它看起来以毫秒为单位,但是由于使用了timeago,它从服务器启动开始-而不是1970年1月1日。

在文档中一定要注意的东西,但这是一个单独的问题。