如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?
Posted
技术标签:
【中文标题】如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?【英文标题】:How to insert date into MySQL DATETIME column from Angular using Node.js? 【发布时间】:2020-02-03 13:42:27 【问题描述】:我的应用程序中有日期选择器。我想将选定的日期插入到具有DATETIME
数据类型的 mysql 数据库列中。
这是使用 console.log(date.value)
的 Angular 中日期选择器的值:
Tue Nov 12 2019 00:00:00 GMT+0200 (Israel Standard Time)
MySQL 数据库插入需要将日期转换为哪种格式?
【问题讨论】:
【参考方案1】:为确保一致性,将所有日期存储在 UTC 时区中会很有帮助。
第 1 步:将 javascript 日期转换为 ISO(UTC 时区)
const isoDateString: string = datePickerDate.toISOString();
这还可以通过 JSON 将日期发送到服务器。
第 2 步:确保 MySQL 时区为 UTC
cursor.execute("SET time_zone = '+00:00'")
第 3 步:为 MySQL 插入格式化日期
在 Node.js 服务器上,解析 ISO 日期字符串(来自第 1 步)并格式化为:'YYYY-MM-DD HH:MM:SS'
const isoDate = new Date(isoDateString);
const mySQLDateString = isoDate.toJSON().slice(0, 19).replace('T', ' ');
MySQL Documentation
MySQL 可识别以下格式的 DATETIME 和 TIMESTAMP 值:
作为 'YYYY-MM-DD HH:MM:SS' 或 'YY-MM-DD HH:MM:SS' 中的字符串 格式。这里也允许使用“宽松”的语法:任何标点符号 字符可用作日期部分或时间之间的分隔符 部分。例如,'2012-12-31 11:30:45'、'2012^12^31 11+30+45'、 '2012/12/31 11*30*45' 和 '2012@12@31 11^30^45' 是等价的。
日期和时间部分与 小数秒部分是小数点。
日期和时间部分可以用 T 而不是空格分隔。为了 例如,'2012-12-31 11:30:45' '2012-12-31T11:30:45' 是等价的。
作为在 'YYYYMMDDHHMMSS' 或 'YYMMDDHHMMSS' 格式,前提是字符串作为日期有意义。 例如,“20070523091528”和“070523091528”被解释为 '2007-05-23 09:15:28',但 '071122129015' 是非法的(它有 无意义的分钟部分)并变为“0000-00-00 00:00:00”。
作为 YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 格式的数字,提供 这个数字作为一个日期是有意义的。例如,19830905132800 和 830905132800 被解释为 '1983-09-05 13:28:00'。
【讨论】:
【参考方案2】:你可以使用这个:yourDate | date: 'yyy-MM-dd HH:MM:SS' 然后将其发送到控制器,然后保存到数据库中
【讨论】:
以上是关于如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 从 angular.js 发送到 node.js
当我尝试从 Angular.js 发送到 Node.js 时,单独的数据丢失了