DateTime.isBefore în Dart

Compară două date: este înainte (isBefore), după (isAfter) sau exact în același moment (isAtSameMomentAs)?

Sintaxă
bool isBefore(DateTime other)
bool isAfter(DateTime other)
bool isAtSameMomentAs(DateTime other)

Ce face DateTime.isBefore

Datele nu se compară cu < și >. Folosești a.isBefore(b) (a este mai devreme), a.isAfter(b) (a este mai târziu) și a.isAtSameMomentAs(b) (același moment). Toate compară momentele, indiferent dacă datele sunt UTC sau locale.

Operatorul == este mai strict: două date sunt egale doar dacă reprezintă același moment și sunt amândouă UTC sau amândouă locale. De aceea, pentru „același moment” preferă isAtSameMomentAs.

Pentru sortare, DateTime implementează Comparable: a.compareTo(b) dă un număr negativ, zero sau pozitiv, iar lista.sort() funcționează direct.

Parametri

Parametru Descriere
other Data cu care se compară.

Ce returnează

Un bool.

Exemple

Exemplul 1: Comparații simple

void main() {
  var a = DateTime.utc(2026, 6, 15, 9);
  var b = DateTime.utc(2026, 6, 15, 12);
  print(a.isBefore(b));
  print(a.isAfter(b));
  print(a.isAtSameMomentAs(b));
  print(a.isBefore(a));
  var c = a.toLocal();
  print(a.isAtSameMomentAs(c));
  print(a == c);
  print(a.compareTo(b));
}

Rezultat

true
false
false
false
true
false
-1

Exemplul 2: Este o reducere activă?

bool activa(DateTime moment, DateTime start, DateTime sfarsit) =>
    !moment.isBefore(start) && moment.isBefore(sfarsit);

void main() {
  var start = DateTime.utc(2026, 11, 27);
  var sfarsit = DateTime.utc(2026, 12, 1);
  for (var m in [DateTime.utc(2026, 11, 26, 23), DateTime.utc(2026, 11, 27), DateTime.utc(2026, 11, 30, 18),
      DateTime.utc(2026, 12, 1)]) {
    print('${m.toIso8601String()}: ${activa(m, start, sfarsit) ? 'Black Friday!' : 'preț normal'}');
  }
}

Rezultat

2026-11-26T23:00:00.000Z: preț normal
2026-11-27T00:00:00.000Z: Black Friday!
2026-11-30T18:00:00.000Z: Black Friday!
2026-12-01T00:00:00.000Z: preț normal

Greșeli frecvente

  • Folosești == între o dată UTC și una locală pentru același moment: rezultatul este false. Folosește isAtSameMomentAs.
  • Verifici un interval cu isAfter(start) și ratezi exact momentul de început. Pentru „de la start inclusiv” scrie !m.isBefore(start).

Comenzi înrudite

  • DateTime.difference: Calculează timpul dintre două date, ca Duration: this minus other.
  • DateTime: Un moment în timp (dată și oră), în fusul orar local sau în UTC. Constructorul creează o dată locală.
  • Comparable: Interfața pentru obiecte care au o ordine naturală; compareTo dă negativ, zero sau pozitiv.
  • DateTime.utc: DateTime.utc creează o dată în UTC; toUtc și toLocal transformă același moment între UTC și ora locală.