簡體   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