Создание системы бронирования, но я борюсь с вставкой даты ввода в таблицу MySQL - PullRequest
2 голосов
/ 08 апреля 2019

Я новичок в программировании, пытаюсь создать систему проката автомобилей с реактивом, узлом и mysql, но мне сложно вставить дату в базу данных.Я знаю, что должен каким-то образом сделать это строкой, а также сделать местный часовой пояс, но не могу понять это.

date.js:

dateOut = "";
dateIn = "";
location = "";
render()
  return(
}
<input type="date" value={this.dateOut} onChange={e => (this.dateOut = e.target.value)} />
<input type="date" value={this.dateIn} onChange={e => (this.dateIn = e.target.value)} />
<input type="text" value={this.location} onChange={e => (this.location = e.target.value)}>
);

add() {
    orderService.addOrder(
      this.dateOut,
      this.dateIn,
      this.location
      id => {
        history.push('/cars/' + id);
      }
    );
  }
} ```

services.js:

  ```addOrder(dateOut, dateIn, location, success) {
    connection.query(
      'insert into Orders (dateOut, dateIn, location, success) values (?, ?, ?)',
      [dateOut, dateIn, location],
      (error, results) => {
        if (error) return console.error(error);

        success(results.insertId);
      }
    );
  } ```

1 Ответ

1 голос
/ 09 апреля 2019

Вот как с этим справиться.

  1. Объявите столбцы dateOut и dateIn как TIMESTAMP типы данных в вашей таблице.
  2. Когда вы предоставляете значения даты / времени для ваших insert запросов, используйте текстовые строки в таких форматах, как 2019-04-08 16:52. Или используйте объекты Date в Javascript.
  3. При регистрации своих пользователей, спросите их предпочтения часового пояса, в частности попросив их выбрать одно из значений в mysql.time_zone_name.name.
  4. Сохраните это предпочтение в виде строки (например, Asia/Kolkata или America/Halifax) в таблице пользовательских настроек. VARCHAR(63) - хороший выбор типа данных для этого столбца.
  5. Каждый раз, когда вы используете соединение MySQL в своем приложении от имени пользователя, сначала введите команду SET time_zone = whateverTheyChose, чтобы установить предпочтительный часовой пояс пользователя.

Почему это хорошо? TIMESTAMP Значения типа данных всегда сохраняются в UTC и всегда переводятся в / из текущего установленного часового пояса при их получении или сохранении.

Если вы хотите вставить текущее значение даты / времени в столбец, вы можете сделать что-то вроде этого:

insert into Orders 
       (dateOut, dateIn, location, success) 
values (NOW(),    NOW(),        ?,       ?)

Обратите внимание, как значения и заполнители в предложении values() соответствуют один к одному с элементами в списке столбцов.

Вы можете прочитать о системе обработки часовых поясов MySQL на 'toobz . Он основан на базе данных IANA zoneinfo . Хранители этой базы данных позаботятся обо всех странных временных проблемах, таких как, когда дневное время начинается и заканчивается в Туркменистане или Индиане, США, так что остальным из нас это не нужно.

Если вы используете DATE или DATETIME типы данных вместо TIMESTAMP, вы не получите этот автоматический материал о часовых поясах. Эти типы данных более или менее похожи на фотографии часов.

Независимо от того, какой тип данных вы используете, вы можете использовать функцию MySQL с именем TIMESTAMPDIFF () для вычисления длительностей. Например,

TIMESTAMPDIFF(HOUR, dateOut, dateIn) 

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

Стоит потратить много времени на изучение того, как ваша база данных обрабатывает даты и время. Они делают это очень хорошо, поэтому вам не нужно заново изобретать спущенное колесо.

И стоит потрудиться, чтобы все это правильно настроить очень рано в жизни вашего приложения. Очень очень трудно изменить работающую систему для обработки этих часовых поясов. (Не спрашивайте, откуда я знаю, что это сложно!)

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