繁体   English   中英

选择ISO 8601格式的Sqlite日期值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM