如何在时间戳中将时间戳与当前时间进行比较

时间:2020-08-13 12:58:30

标签: 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 && diff.inMinutes == 0 ||
      diff.inMinutes > 0 && diff.inHours == 0 ||
      diff.inHours > 0 && diff.inDays == 0) {
  } else if (diff.inDays > 0 && 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天前一样返回值。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

DateTime.parse返回一个DateTimereadTimestamp似乎期望从纪元开始的秒数,因此您只需要使用DateTime.millisecondsSinceEpoch并将毫秒转换为秒:

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

就个人而言,如果您控制readTimestamp函数,我会将其模棱两可的timestamp参数重命名为secondsSinceEpoch,以明确说明其期望值。甚至更好的方法是将其参数更改为直接采用DateTime而不是执行不必要的DateTime <=>毫秒<=>秒转换。