Как мне обрабатывать дату и время в групповом живом чате? - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я программирую групповой чат для небольшого проекта на PHP. Во время программирования я столкнулся с большим вопросом: как мне обращаться с датой и временем?

Чат спроектирован таким образом, что теоретически бесконечное количество людей могут писать друг с другом в чате.

Теперь, когда кто-то пишет новое сообщение, я, естественно, хочу отобразить текущую дату и время пользователя в сообщении, чтобы пользователь впоследствии знал, когда он написал, какое сообщение. Я решил эту проблему, вызвав функцию в JavaScript при добавлении сообщения, которое добавляет сообщение в чат, а затем сохраняет его в базе данных через AJAX.

Чтобы установить время в новом сообщении, я действовал следующим образом:

let messageWrapper = $( "#message-wrapper" ),
    newMessage     = $( "#template" ).clone(),
    newMessageDate = new Date();

newMessage.find( ".time" ).text( newMessageDate.getHours() + ":" + +( newMessageDate.getMinutes() < 10 ? "0" : "" ) + newMessageDate.getMinutes() );

messageWrapper.append( newMessage );

После добавления сообщения я теперь записываю его в свою базу данных. Для этого я использую AJAX:

let data = {
    action: "create_message",
    created: newMessageDate.getTime()
};

$.post( ajax_url, data, function () {
} ).success( function () {
    console.log( "Message successfully saved in DB" );
} );

Как видите, я использую здесь функцию getTime(), которая дает мне метку времени даты.

В PHP я теперь получаю метку времени и меняю ее на формат метки времени своей базы данных, чтобы я мог правильно сохранить ее в базе данных:

$created           = $_POST['created'];
$formatted_created = date( 'Y-m-d H:i:s', $created / 1000 );

Но здесь я заметил, что метка времени в формате UT C и не соответствует времени в новом сообщении. Я думал, что это не будет проблемой, и я просто должен уважать часовой пояс при его отображении, но это не так просто.

Если предположить, что человек А приехал из Америки и пишет в чате, то его время показано, и я получаю метку времени в формате UT C. На другом конце света человек B сидит и имеет другой часовой пояс. Там браузер использует местное время и отметка времени UT C.

Однако теперь у меня проблема в том, что я не знаю, как отобразить сообщение пользователю в правильном формате, в зависимости от часового пояса пользователя.

Конечно PHP предложения возможность установить часовой пояс, но тогда это будет только определенный часовой пояс, который в моем случае бесполезен:

date_default_timezone_set('America/Los_Angeles');
echo date( 'Y-m-d H:i:s', strtotime( $message->created ) );

Мой вопрос, как мне поступить в этом случае? Как мне определить дату и время для нового сообщения?

PS: я знаю, что это много теории, и не всем разработчикам это нравится. Тем не менее, я очень старался описать проблему как можно лучше. Если чего-то не хватает для разъяснения, я с радостью добавлю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...