创建预订系统,但我很难将输入日期插入MySQL表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建预订系统,但我很难将输入日期插入MySQL表相关的知识,希望对你有一定的参考价值。
我是编程尝试使用reactjs,node和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);
}
);
} ```
这是如何处理这个。
- 将
dateOut
和dateIn
列声明为表格中的TIMESTAMP
数据类型。 - 当您为
insert
查询提供日期/时间值时,请使用格式为2019-04-08 16:52
的文本字符串。或者使用javascript Date对象。 - 注册用户时,请询问他们的时区偏好,特别是要求他们从
mysql.time_zone_name.name
中的某个值中进行选择。 - 将该首选项存储为用户首选项表中的字符串(如
Asia/Kolkata
或America/Halifax
)。VARCHAR(63)
是该列数据类型的一个很好的选择。 - 每次在代表用户的应用程序中使用MySQL连接时,首先发出命令
SET time_zone = whateverTheyChose
以设置用户的时区首选项。
为什么这样好? TIMESTAMP
数据类型值始终以UTC格式存储,并且在检索或存储时始终转换为当前设置的时区。
如果要将当前日期/时间值插入列中,可以执行以下操作:
insert into Orders
(dateOut, dateIn, location, success)
values (NOW(), NOW(), ?, ?)
请注意values()
子句中的值和占位符如何与列列表中的项一一对应。
你可以读一下MySQL's time zone handling system on the 'toobz。它基于IANA's zoneinfo database。该数据库的维护者负责处理所有奇怪的时间政治因素,例如白天时间在土库曼斯坦或美国印第安纳州的开始和结束,所以我们其他人不必这样做。
如果你使用DATE
或DATETIME
数据类型而不是TIMESTAMP
,你就不会得到那些自动时区的东西。这些数据类型或多或少都像时钟照片。
无论您使用哪种数据类型,都可以使用名为TIMESTAMPDIFF()的MySQL函数来计算持续时间。例如,
TIMESTAMPDIFF(HOUR, dateOut, dateIn)
告诉您两个日期/时间值之间的小时数。即使您的两个值跨越白天时间切换天,它也能正常工作。
值得花费大量时间来了解dbms如何处理日期和时间。他们做得非常好,所以你不必重新发明爆胎。
并且,在应用程序的生命周期中尽早正确设置所有这些是值得的。更改正在运行的系统以处理这些时区非常困难。 (不要问我怎么知道这很难!)
以上是关于创建预订系统,但我很难将输入日期插入MySQL表的主要内容,如果未能解决你的问题,请参考以下文章