Ce face DateTime.difference
a.difference(b) returnează o Duration egală cu a - b. Dacă a este după b, durata este pozitivă; altfel este negativă. Din ea citești zilele, orele sau minutele cu inDays, inHours și celelalte.
Diferența se calculează între momente, deci funcționează corect și între o dată UTC și una locală. În ora locală, o diferență peste trecerea la ora de vară poate avea o oră în plus sau în minus (de exemplu 6 zile și 23 de ore), iar inDays rotunjește în jos. Pentru numărul de zile calendaristice, creează ambele date cu DateTime.utc.
Parametri
| Parametru | Descriere |
|---|---|
other |
Data scăzută. |
Ce returnează
Un Duration (poate fi negativ).
Exemple
Exemplul 1: Durata unei călătorii
void main() {
var plecare = DateTime.utc(2026, 7, 10, 6, 45);
var sosire = DateTime.utc(2026, 7, 10, 15, 20);
var drum = sosire.difference(plecare);
print(drum);
print('${drum.inHours} ore și ${drum.inMinutes % 60} minute');
print(plecare.difference(sosire));
print(plecare.difference(sosire).isNegative);
}
Rezultat
8:35:00.000000
8 ore și 35 minute
-8:35:00.000000
true
Exemplul 2: Zile până la sfârșitul anului școlar
void main() {
var azi = DateTime.utc(2026, 10, 19);
var vacante = {
'Crăciun': DateTime.utc(2026, 12, 20),
'Paște': DateTime.utc(2027, 4, 24),
'vara': DateTime.utc(2027, 6, 18),
};
vacante.forEach((nume, data) {
print('Până la vacanța de $nume: ${data.difference(azi).inDays} zile');
});
}
Rezultat
Până la vacanța de Crăciun: 62 zile
Până la vacanța de Paște: 187 zile
Până la vacanța de vara: 242 zile
Greșeli frecvente
- Inversezi ordinea și primești o durată negativă.
a.difference(b)înseamnăa - b: pune data mai târzie în stânga. - Numeri zile între date locale peste trecerea la ora de vară și primești cu o zi mai puțin. Folosește date UTC fără oră.
Comenzi înrudite
Duration.inDays: Dau durata întreagă exprimată într-o singură unitate: zile, ore, minute, secunde sau milisecunde (rotunjit spre zero).DateTime.add: Returnează o dată nouă, mutată înainte (add) sau înapoi (subtract) cu o durată dată.DateTime.isBefore: Compară două date: este înainte (isBefore), după (isAfter) sau exact în același moment (isAtSameMomentAs)?Duration: Un interval de timp (de exemplu 2 ore și 30 de minute), independent de calendar; Duration.zero este durata 0.