web-dev-qa-db-fra.com

Comparer uniquement les dates de DateTimes dans Dart

J'ai besoin de stocker et de comparer des dates (sans heures) dans mon application, sans me soucier des fuseaux horaires.
Je peux voir trois solutions à cela:

  1. (date1.year == date2.year && date1.month == date2.month && date1.day == date2.day)
    C'est ce que je fais maintenant, mais c'est horrible verbeux.

  2. date1.format("YYYYMMDD") == date2.format("YYYYMMDD")
    C'est encore assez verbeux (mais pas aussi mauvais), mais il me semble tout simplement inefficace ...

  3. Créer moi-même une nouvelle classe Date, en stockant peut-être la date sous forme de chaîne "YYYYMMDD", ou nombre de jours depuis le 1er janvier 1980. Mais cela signifie réimplémenter tout un tas de logique complexe comme différentes durées de mois, ajouter/soustraire et années bissextiles .

La création d'une nouvelle classe évite également un cas Edge qui m'inquiète, où l'ajout de Duration(days: 1) se termine à la même date en raison des modifications de l'heure d'été. Mais il y a probablement des cas Edge avec cette méthode à laquelle je ne pense pas ...

Quelle est la meilleure de ces solutions ou existe-t-il une solution encore meilleure à laquelle je n'ai pas pensé?

13
Lucas

Vous pouvez utiliser différence :

int diffDays = date1.difference(date2).inDays;
bool isSame = (diffDays == 0);
2
eggant

Vous pouvez utiliser compareTo :

  var temp = DateTime.now().toUtc();
  var d1 = DateTime.utc(temp.year,temp.month,temp.day);
  var d2 = DateTime.utc(2018,10,25);     //you can add today's date here
  if(d2.compareTo(d1)==0){
    print('true');
  }else{
    print('false');
  }
0
yashthakkar1173

J'ai fini par utiliser ce paquet Dart , qui est essentiellement l'option 3.

0
Lucas

J'utilise cette fonction pour calculer la différence en jours.

La comparaison des dates est délicate car le résultat dépend non seulement des horodatages mais également du fuseau horaire de l'utilisateur.

int diffInDays (DateTime date1, DateTime date2) {
    return ((date1.difference(date2) - Duration(hours: date1.hour) + Duration(hours: date2.hour)).inHours / 24).round();
}
0
Edwin Liu