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