Ce face unixepoch, julianday, timediff
Ca să afli câte zile sau ore sunt între două momente, transformi datele în numere și le scazi. unixepoch() (din SQLite 3.38.0) întoarce numărul întreg de secunde de la 1 ianuarie 1970, ora 00:00 UTC; diferența a două valori este în secunde. julianday(), disponibilă de mult mai mult timp, întoarce numărul zilei iuliene ca număr real; diferența a două valori este în zile, cu zecimale pentru ore.
Drumul invers: datetime(1792929600, 'unixepoch') transformă un timestamp Unix în text. Dacă stochezi date ca numere, acesta este modul de a le afișa. Din 3.38.0 există și modificatorul 'auto', care ghicește dacă numărul este zi iuliană sau timestamp Unix.
timediff(a, b) (din 3.43.0) întoarce diferența a - b ca text de forma +AAAA-LL-ZZ HH:MM:SS.SSS: ani, luni, zile și ore întregi, ca o vârstă. Este util pentru afișare; pentru calcule (sume, medii) folosește diferențele numerice.
Parametri
| Parametru | Descriere |
|---|---|
valoare_timp |
Orice valoare acceptată de date(), cu modificatori opționali. |
timp1, timp2 |
La timediff: cele două momente; rezultatul este timp1 - timp2. |
Ce returnează
unixepoch: INTEGER; julianday: REAL; timediff: TEXT.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE inchirieri (
client TEXT NOT NULL,
inceput TEXT NOT NULL, -- 'AAAA-LL-ZZ HH:MM:SS'
sfarsit TEXT NOT NULL
);
INSERT INTO inchirieri VALUES
('Ana', '2026-10-20 09:00:00', '2026-10-22 18:30:00'),
('Vlad', '2026-10-24 10:15:00', '2026-10-24 16:45:00');
Exemplul 1: Din dată în timestamp și înapoi
Timestamp-ul este în UTC. Adunând 86.400 de secunde (o zi) și transformând înapoi cu 'unixepoch' obții ziua următoare.
SELECT unixepoch('2026-10-25 12:00:00') AS timestamp,
datetime(1792929600, 'unixepoch') AS inapoi,
datetime(1792929600 + 86400, 'unixepoch') AS a_doua_zi,
julianday('2026-10-25 12:00:00') AS zi_iuliana;
Rezultat
╭────────────┬─────────────────────┬─────────────────────┬────────────╮
│ timestamp │ inapoi │ a_doua_zi │ zi_iuliana │
╞════════════╪═════════════════════╪═════════════════════╪════════════╡
│ 1792929600 │ 2026-10-25 12:00:00 │ 2026-10-26 12:00:00 │ 2461339.0 │
╰────────────┴─────────────────────┴─────────────────────┴────────────╯
Exemplul 2: Durata fiecărei închirieri
Diferența de unixepoch este în secunde; împărțită la 3.600 dă ore. Diferența de julianday este direct în zile. round păstrează două zecimale.
SELECT client,
unixepoch(sfarsit) - unixepoch(inceput) AS secunde,
round((unixepoch(sfarsit) - unixepoch(inceput)) / 3600.0, 2) AS ore,
round(julianday(sfarsit) - julianday(inceput), 2) AS zile
FROM inchirieri
ORDER BY client;
Rezultat
╭────────┬─────────┬──────┬──────╮
│ client │ secunde │ ore │ zile │
╞════════╪═════════╪══════╪══════╡
│ Ana │ 207000 │ 57.5 │ 2.4 │
│ Vlad │ 23400 │ 6.5 │ 0.27 │
╰────────┴─────────┴──────┴──────╯
Exemplul 3: timediff pentru durate și vârste
Închirierea Anei a durat 2 zile și 9 ore și jumătate. A doua coloană arată vârsta cuiva născut pe 15 martie 1990, la data de 25 octombrie 2026: 36 de ani, 7 luni și 10 zile. Numărul de zile dintre două date se obține și din diferența de julianday.
SELECT timediff(sfarsit, inceput) AS durata
FROM inchirieri WHERE client = 'Ana';
SELECT timediff('2026-10-25', '1990-03-15') AS varsta,
CAST(julianday('2026-12-25') - julianday('2026-10-25') AS INTEGER) AS zile_pana_la_craciun;
Rezultat
╭──────────────────────────╮
│ durata │
╞══════════════════════════╡
│ +0000-00-02 09:30:00.000 │
╰──────────────────────────╯
╭──────────────────────────┬──────────────────────╮
│ varsta │ zile_pana_la_craciun │
╞══════════════════════════╪══════════════════════╡
│ +0036-07-10 00:00:00.000 │ 61 │
╰──────────────────────────┴──────────────────────╯
Greșeli frecvente
- Împarți secundele la
3600(întreg) și pierzi zecimalele:23400 / 3600dă 6, nu 6,5. Împarte la3600.0. - Uiți că
unixepochși'unixepoch'lucrează în UTC. Un timestamp afișat fără'localtime'poate părea cu 2–3 ore în urmă față de ora României. - Compari direct rezultatul lui
juliandaycu un număr întreg de zile. Fiind REAL,297.0și296.99999pot apărea din calcule cu ore; rotunjește curoundsauCAST(... AS INTEGER).
Comenzi înrudite
date, time, datetime: Transformă și calculează date: extrage ziua sau ora, adună zile și luni, găsește începutul lunii sau lunea următoare.strftime: Formatează o dată după un șablon ales de tine (de exemplu 25.10.2026 09:05) sau extrage din ea anul, luna, ziua săptămânii.SUM() OVER: totaluri cumulate și medii mobile: Folosește SUM, AVG, COUNT, MIN și MAX ca funcții fereastră: totaluri cumulate, medii pe ultimele zile, procente din total.