97 lines
2.9 KiB
Dart
97 lines
2.9 KiB
Dart
import 'package:intl/intl.dart';
|
|
|
|
class DateUtils {
|
|
/// Converts Unix timestamp (seconds since epoch) to a formatted date string
|
|
static String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
|
if (unixTimestamp == null) return '';
|
|
|
|
// Convert seconds to milliseconds if needed
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
return DateFormat(format).format(dateTime);
|
|
}
|
|
|
|
/// Converts Unix timestamp to a readable date string
|
|
static String unixToReadableDate(int? unixTimestamp) {
|
|
if (unixTimestamp == null) return '';
|
|
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
final DateTime now = DateTime.now();
|
|
final Duration difference = now.difference(dateTime);
|
|
|
|
if (difference.inDays == 0) {
|
|
return 'Today';
|
|
} else if (difference.inDays == 1) {
|
|
return 'Yesterday';
|
|
} else if (difference.inDays < 7) {
|
|
return '${difference.inDays} days ago';
|
|
} else {
|
|
return DateFormat('MMM dd, yyyy').format(dateTime);
|
|
}
|
|
}
|
|
|
|
/// Converts Unix timestamp to a short date format
|
|
static String unixToShortDate(int? unixTimestamp) {
|
|
if (unixTimestamp == null) return '';
|
|
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
return DateFormat('MMM dd').format(dateTime);
|
|
}
|
|
|
|
/// Converts Unix timestamp to a full date and time format
|
|
static String unixToDateTime(int? unixTimestamp) {
|
|
if (unixTimestamp == null) return '';
|
|
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
return DateFormat('MMM dd, yyyy HH:mm').format(dateTime);
|
|
}
|
|
|
|
/// Checks if a Unix timestamp is in the past
|
|
static bool isPast(int? unixTimestamp) {
|
|
if (unixTimestamp == null) return false;
|
|
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
return dateTime.isBefore(DateTime.now());
|
|
}
|
|
|
|
/// Gets the number of days remaining until a Unix timestamp
|
|
static int daysRemaining(int? unixTimestamp) {
|
|
if (unixTimestamp == null) return 0;
|
|
|
|
int timestampInMs =
|
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
|
|
|
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
|
|
timestampInMs,
|
|
);
|
|
final DateTime now = DateTime.now();
|
|
final Duration difference = dateTime.difference(now);
|
|
|
|
return difference.inDays;
|
|
}
|
|
}
|