Ce face DateTime.add
add(durată) adaugă o Duration la dată și returnează o dată nouă; subtract scade. Data originală nu se schimbă. Exemplu: d.add(Duration(days: 7)) este peste o săptămână.
Atenție: Duration(days: 1) înseamnă exact 24 de ore. În ora locală, peste trecerea la ora de vară sau de iarnă, o zi poate avea 23 sau 25 de ore, iar rezultatul se poate muta cu o oră. Pentru „aceeași oră, ziua următoare” folosește constructorul sau copyWith(day: d.day + 1), ori lucrează în UTC.
Nu există Duration(months: 1), pentru că lunile au lungimi diferite. Pentru a aduna luni, folosește DateTime(d.year, d.month + 1, d.day).
Parametri
| Parametru | Descriere |
|---|---|
duration |
Durata adăugată sau scăzută. |
Ce returnează
Un DateTime nou, în același fus (UTC sau local).
Exemple
Exemplul 1: Termene de plată
String f(DateTime d) => '${d.day}.${d.month}.${d.year}';
void main() {
var emitere = DateTime.utc(2026, 10, 19);
print('Factura: ${f(emitere)}');
print('Scadență (30 de zile): ${f(emitere.add(Duration(days: 30)))}');
print('Acum o săptămână: ${f(emitere.subtract(Duration(days: 7)))}');
var start = DateTime.utc(2026, 10, 19, 22, 30);
print(start.add(Duration(hours: 3, minutes: 45)));
}
Rezultat
Factura: 19.10.2026
Scadență (30 de zile): 18.11.2026
Acum o săptămână: 12.10.2026
2026-10-20 02:15:00.000Z
Exemplul 2: Trecerea la ora de iarnă
În noaptea de 25 octombrie 2026 România trece la ora de iarnă, deci ziua are 25 de ore. Rezultatul depinde de fusul orar; exemplul a rulat în București.
void main() {
var sambata = DateTime(2026, 10, 24, 12);
print(sambata.add(Duration(days: 1)));
print(DateTime(sambata.year, sambata.month, sambata.day + 1, 12));
}
Rezultat posibil (diferă la fiecare rulare)
2026-10-25 11:00:00.000
2026-10-25 12:00:00.000
Exemplul 3: Adăugarea de luni
DateTime adaugaLuni(DateTime d, int luni) {
var tinta = DateTime.utc(d.year, d.month + luni, 1);
var ultimaZi = DateTime.utc(tinta.year, tinta.month + 1, 0).day;
return DateTime.utc(tinta.year, tinta.month, d.day > ultimaZi ? ultimaZi : d.day);
}
void main() {
var d = DateTime.utc(2026, 1, 31);
for (var i = 1; i <= 3; i++) {
var r = adaugaLuni(d, i);
print('+$i ${i == 1 ? 'lună' : 'luni'}: ${r.day}.${r.month}.${r.year}');
}
}
Rezultat
+1 lună: 28.2.2026
+2 luni: 31.3.2026
+3 luni: 30.4.2026
Greșeli frecvente
- Apelezi
d.add(...)fără să păstrezi rezultatul.DateTimeeste imutabil:d = d.add(...). - Folosești
Duration(days: 30)pentru „o lună”. Lunile au 28–31 de zile; adaugă luni prin constructor.
Comenzi înrudite
Duration: Un interval de timp (de exemplu 2 ore și 30 de minute), independent de calendar; Duration.zero este durata 0.DateTime.difference: Calculează timpul dintre două date, ca Duration: this minus other.DateTime.copyWith: Creează o dată nouă, copiind-o pe cea existentă și schimbând doar componentele date ca argumente.DateTime.utc: DateTime.utc creează o dată în UTC; toUtc și toLocal transformă același moment între UTC și ora locală.