[英]Select Sqlite date values in ISO 8601 format
我正在使用Knex.js从SQLite数据库中选择记录。 然后,我希望将记录作为JSON作为Web API的一部分返回。 从Sqlite中选择日期时,它们的格式类似于2018-01-01 00:00:00.000
我希望将其格式化为JavaScript的日期toJSON()函数: 1975-08-19T23:15:30.000Z
查询数据库时,是否有办法像这样格式化日期字段?
所以我希望在连接字符串或Knex等中有一种方法可以告诉Sqlite如何格式化日期。
简短的回答:对不起,没有。
SQLite将您的ISO8601日期存储为字符串,并且没有内置的数据类型来改变它。
从SQLite文档中 :
SQLite没有为存储日期和/或时间预留存储类。 相反,SQLite内置的日期和时间功能可以将日期和时间存储为TEXT,REAL或INTEGER值:
文本为ISO8601字符串(“ YYYY-MM-DD HH:MM:SS.SSS”)。
实际为儒略日数,根据公历在公元前4714年11月24日格林威治中午以来的天数。
INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
可能的解决方法#1-在数据库中:您可能可以在CREATE TRIGGER BEFORE ...
使用@sbooth指出的strftime()
来覆盖默认的存储字符串格式。 Docs链接 (抱歉,我个人还没有这样做。)
可能的解决方法#2-在JS代码中:使用javascript(如您提到的.toJSON()
)以另一种方式对日期字符串进行预格式化以进行存储。 我使用类似:
var createDate = (new Date()).toISOString();
...以代码格式存储我的日期,该格式具有您要查找的格式: '2018-01-28T02:39:53.226Z'
。
此外,还需要注意以下问题:当您通过Knex从SQLite数据库中SELECT
ISO8601字符串日期“类型”时,它将以字符串类型而不是Date()类型返回。
希望这会有所帮助。 加里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.