#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(),
);
}