Jas*_*n C 6 javascript mysql node.js knex.js
我在查找Node.js,knex和MySQL(通过Bookshelf)常见的日期格式时遇到了一些麻烦.
我使用Knex架构构建器设置了一个表:
knex.schema.createTableIfNotExists("examples", function (table) {
...
table.dateTime("some_datetime");
})
Run Code Online (Sandbox Code Playgroud)
这将DATETIME在MySQL中创建一个类型的列.
我有一个代表这个的Bookshelf模型(在这里省略了所有的样板文件),我尝试使用内置Date.now()的值:
exampleModel.save({
some_datetime: Date.now()
})
Run Code Online (Sandbox Code Playgroud)
在Knex中打开调试后,我看到查询实际上是在尝试插入一个毫秒的纪元时间戳("......"为简洁起见):
{ ...
bindings: [ 1485644012453, ... ],
sql: 'update `examples` set `some_datetime` = ? where `id` = ?' }
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为MySQL希望你FROM_UNIXTIME在这种情况下使用,因此数据库中的结果日期当然是好的0000-00-00 00:00:00.
我应该在这做什么才能使这一切保持一致?
Date.now()?我在这里找不到共同点.我的直觉说dateTime在使用Knex,Date.now()在Node中,DATETIME在MySQL中,但这是不正确的.
只是要清楚:这个问题不一定集中在什么是哲学正确的-此刻,我居然无法弄清楚如何存储日期/数据库倍一切.我正在寻找一个有效的组合,语义正确只会是一个奖励.
Mik*_*stö 11
Javascript函数Date.now()以毫秒为单位返回纪元.knex用于发送查询的Mysql驱动程序需要将ISO8061字符串或Date()对象传递给DATETIME列.
日期对象转换为'YYYY-mm-dd HH:ii:ss'字符串
https://github.com/mysqljs/mysql
所以不要Date.now()使用new Date()或new Date().toISOString()
编辑:
只是检查mysql真的接受.toISOString()输出,因为我无法从docs https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html找到它的提及
MariaDB [(none)]> select CAST('2017-01-30T16:49:19.278Z' AS DATETIME);
+----------------------------------------------+
| CAST('2017-01-30T16:49:19.278Z' AS DATETIME) |
+----------------------------------------------+
| 2017-01-30 16:49:19 |
+----------------------------------------------+
1 row in set, 1 warning (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
看起来确实如此.好极了!都好.
Ben*_*uer 11
相反的Date.now(),你可以使用内置now()的功能Knex.js:
const knexfile = require('../../knexfile');
const knex = require('knex')(knexfile.development);
const date = knex.fn.now();
Run Code Online (Sandbox Code Playgroud)
选择:
const knexfile = require('../../knexfile');
const knex = require('knex')(knexfile.development);
knex.raw('CURRENT_TIMESTAMP');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14438 次 |
| 最近记录: |