使用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
404912018年9月6日星期四15:31:03
3037622018年9月6日星期四16:26:40
13513672018年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 ...这是如何产生的?
谢谢
答案 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日。
在文档中一定要注意的东西,但这是一个单独的问题。