Мое приложение чата узла не показывает правильное время на стороне клиента, но это прекрасно работает, какой-то браузер Почему? - PullRequest
0 голосов
/ 02 апреля 2020

Я - младший веб-разработчик, и у меня возникли некоторые проблемы в приложении чата на основе Node. Это показывает время, когда пользователь отправляет свои сообщения. Такой код вы можете увидеть в моем клиентском файле Main. js.

// Submit the form
  $('form').submit(async e => {
    e.preventDefault();
    let time = await getTime();
    socket.emit('brodcast', putUserMsg( $('#msg').val(), time));

    $('#msg').val('');
    return false;
  });

function getTime(){
  // For reference 
  // Create instance of Date and get the notation 
  // const notation = new Date().toLocaleString().split(' ')[2];

  //split the time zone
  // const timearr = new Date().toLocaleString().split(' ')[1].split(':');

  return `${
    new Date()
      .toLocaleString()
      .split(' ')[1]
      .split(':')[0]
  }:${
    new Date()
      .toLocaleString()
      .split(' ')[1]
      .split(':')[1]
  } ${new Date().toLocaleString().split(' ')[2]}`;
}

// Return object 
function putUserMsg(msg, time){
  return{
      msg,
      time
  }
}

[Это мой мобильный вид в браузере chrome, и вы можете заметить, что когда тип сообщения и нажмите ввод введите время было показано неопределенным, почему это произошло. Но я также пробую другой браузер, такой как Ucbrower, он работает очень хорошо. Почему они произошли? Точно так же на моем ноутбуке он работает очень хорошо, мой единственный, и единственный вопрос, почему они не отображаются в браузере Chrome?

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 апреля 2020

Я не знаю, почему это работает в других браузерах, но не работает на Chrome, но позвольте мне дать вам общий совет: Делайте это как можно проще.

Вы выполняете различные манипуляции с объектом Date, которые трудно отслеживать и отлаживать. Все, что вам нужно сделать, это просто отправить объект Date как есть, который будет автоматически преобразован в Date (). ToISOString (). Эта строка, которая выглядит примерно так: 2020-04-02T23: 51: 13.866Z - единственное, что вам нужно хранить. Это универсальное время UT C, на которое не влияют изменения в вашем регионе и переход на летнее время.

Таким образом, ваше излучение socketIO должно выглядеть так:

 socket.emit('brodcast', putUserMsg( $('#msg').val(), new Date()));

Позже, в вашем пользовательском интерфейсе вы можете делать нужные манипуляции с датой и представлять ее в виде sh. Получив строку Date (которая была создана автоматически при отправке объекта Date ранее) обратно с сервера, вы можете сделать что-то вроде этого:

<p>{new Date(timeStringFromServer).toLocaleTimeString()}</p>//This will create a Date object from the string, and allow you to manipulate it.

Но вещь, которую вы отправляете через сокет .io / ajax, всегда должен быть таким же простым, как новая Дата (). Также я рекомендую использовать Момент. js для дат.

...