Какой формат является 5/6-разрядной временной меткой и как ее преобразовать?
Используя Ratchet WebSocket, я пытаюсь отобразить отметку времени отправленного сообщения. я console.log(e)
внутри обратного вызова onmessage и я получаю объект:
{
//... rest of the keys
timeStamp: 353443
}
Я думал, что это выглядело странно, учитывая, что отправил его в 13:48. Как ни странно, раньше я отправлял запрос в течение последнего часа, и он возвращал 5-значную временную метку, что значительно усложняло мои исследования.
Я попытался поискать в документе Ratchet docs поле, но ничего не смог найти. Я сразу же попытался узнать, была ли это метка времени UNIX, преобразовав ее в онлайн, но все значения вернулись
1 января 1970 года: время
Как я могу преобразовать возвращенную метку времени в d/m/y H:i
? Я не могу найти ничего в том, в каком формате это может быть или как конвертировать.
В настоящее время у меня есть (в моем JQuery):
new Date(data.timeStamp*1000)
но это возвращает 1 января вещь.
Я пробовал два раза:
Четверг 6 сентября 2018 14:03: (секунд было примерно 13)
Четверг 6 сентября 2018 14:19:24
Это произвело эти метки времени (соответственно):
0 1 2 3 3 8 4
2 1 9 5 6 8 3
(дисплей был без пробелов)
(примечание: ведущий 0 не выводился - только для сравнения столбцов)
Я попытался сравнить два, все, кроме минуты и секунды, должно быть одинаковым, но только два столбца совпадают.
Как я, возможно, думал, что это могло быть (но оказывается, что это не может быть основано на том, насколько отличны результаты):
Четверг может быть 3 или 4 в зависимости от того, установил ли кодировщик в воскресенье или понедельник значение 0.
6-е должно логически равняться 6
Сентябрь может быть 8, если Ян = 0
2018 может быть 18
14 может быть 2, если 12 часов с установкой флага утра / вечера
Вот мой класс 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();
}
}
и мой чат-сервер.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 новые даты:
Чт 06 сентября 2018 15:26:40
Чт 06 сентября 2018 15:31:03
Чт 06 сентября 2018 16:26:40
Чт 06 сентября 2018 16:31:03
У меня была теория, что, возможно, время идет от определенного времени, поэтому 26:40
всегда будет таким же, как X микросекунд с часа. Вот результаты:
Чт 06 сентября 2018 15:26:40
40491Чт 06 сентября 2018 15:31:03
303762Чт 06 сентября 2018 16:26:40
1351367Чт 06 сентября 2018 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 ответ
Благодаря комментарию @ Мишеля мне удалось это выяснить.
Я зашел на страницу проекта jagery-плагина timeago, и он показал, что он идет от соединения, как сказал Мишель.
Это идет от времени соединения с сервером - для тестирования я сделал:
загрузил скрипт в 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 это происходит с момента запуска сервера, а не 1 января 1970 года.
Что-то, что обязательно должно быть отмечено в документации, но это отдельная проблема.