如何使用 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 列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从角度发送到node.js

将 JSON 从 angular.js 发送到 node.js

当我尝试从 Angular.js 发送到 Node.js 时,单独的数据丢失了

如何在 Angular 应用程序中使用 Node.js“Net”类(或其他 TCP 后端)

从 MongoDB 在 Angular.js 中显示图像

如何将 Angular 4 添加到现有的 node.js 应用程序