我正在使用Knex.js从SQLite数据库中选择记录。然后我希望将记录作为JSON返回,作为web api的一部分。从Sqlite中选择日期时,它们的格式为 2018-01-01 00:00:00.000
我希望它们的格式类似于JavaScript的date toJSON()函数: 1975-08-19T23:15:30.000Z
有没有办法让数据库在查询时格式化这样的日期字段?
答案 0 :(得分:2)
所以我希望在连接字符串或Knex等方面有一种方法 告诉Sqlite如何格式化日期。
简答:抱歉,没有。
SQLite将您的ISO8601日期存储为字符串,并且没有内置数据类型可以改变它。
来自Docs link:
SQLite没有为存储日期留出的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为TEXT,REAL或INTEGER 值:
TEXT as ISO8601字符串(" YYYY-MM-DD HH:MM:SS.SSS")。
真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据公历格里高利历。
INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
可能的解决方法#1 - 在数据库中:
您可以在strftime()
中使用@sbooth注明的CREATE TRIGGER BEFORE ...
来覆盖默认的存储字符串格式。 MS SQL documentation - PIVOT(对不起,我个人并没有这样做过。)
可能的解决方法#2 - 在JS代码中:
使用javascript(就像你提到的那样:.toJSON()
)以另一种方式预先格式化日期字符串以进行存储。我用的是:
var createDate = (new Date()).toISOString();
...在代码中格式化我的存储日期,代码具有您要查找的格式:'2018-01-28T02:39:53.226Z'
。
此外,还有一个可能需要注意的问题:当您SELECT
ISO8601字符串日期'键入'从SQLite DB通过Knex,它将作为字符串类型返回,而不是Date()类型。
希望这有帮助。加里。