Как сравнить временную метку с текущим временем в flutter

#flutter #dart #dart-pub

#flutter #dart #dart-pub

Вопрос:

Это моя временная метка = «2020-05-29T17:43:39.622832 05:30». Как я могу передать ее в функцию readTimeStamp (это выдаст мне ошибку не типа int)?

 date = DateTime.parse(bookDetails.timestamp);
   print(readTimestamp(date));

String readTimestamp(int timestamp) {
  var now = DateTime.now();
  var date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
  var diff = now.difference(date);
  String time = '';

  if (diff.inSeconds <= 0 ||
      diff.inSeconds > 0 amp;amp; diff.inMinutes == 0 ||
      diff.inMinutes > 0 amp;amp; diff.inHours == 0 ||
      diff.inHours > 0 amp;amp; diff.inDays == 0) {
  } else if (diff.inDays > 0 amp;amp; diff.inDays < 7) {
    if (diff.inDays == 1) {
      time = diff.inDays.toString()   ' DAY AGO';
    } else {
      time = diff.inDays.toString()   ' DAYS AGO';
    }
  } else {
    if (diff.inDays == 7) {
      time = (diff.inDays / 7).floor().toString()   ' WEEK AGO';
    } else {
      time = (diff.inDays / 7).floor().toString()   ' WEEKS AGO';
    }
  }

  return time;
}
  

Это моя функция, которая возвращает значение, например, 3 дня назад и все такое.

Ответ №1:

DateTime.parse возвращает DateTime . readTimestamp похоже, что ожидается количество секунд с момента начала эпохи, поэтому вам просто нужно использовать DateTime.millisecondsSinceEpoch и преобразовать миллисекунды в секунды:

 print(readTimestamp(date.millisecondsSinceEpoch ~/ 1000));
  

Лично я, если вы управляете readTimestamp функцией, переименовал бы ее неоднозначный timestamp аргумент в secondsSinceEpoch , чтобы было ясно, чего она ожидает. Еще лучше было бы изменить его аргумент, чтобы он принимал DateTime напрямую вместо выполнения ненужных DateTime преобразований <=> миллисекунд <=> секунд.

Ответ №2:

 bool isAfterToday(Timestamp timestamp) {
    return DateTime.now().toUtc().isAfter(
        DateTime.fromMillisecondsSinceEpoch(
            timestamp.millisecondsSinceEpoch,
            isUtc: false,
        ).toUtc(),
    );
}