DateTime.add în Dart

Returnează o dată nouă, mutată înainte (add) sau înapoi (subtract) cu o durată dată.

Sintaxă
DateTime add(Duration duration)
DateTime subtract(Duration duration)

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. DateTime este 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ă.