61 lines
1.7 KiB
Dart
61 lines
1.7 KiB
Dart
import 'package:intl/intl.dart';
|
|
|
|
class DateFormatter {
|
|
DateFormatter._();
|
|
|
|
/// Application-wide display format: DD/MM/YYYY
|
|
static const displayDatePattern = 'dd/MM/yyyy';
|
|
static const displayDateTimePattern = 'dd/MM/yyyy, hh:mm a';
|
|
|
|
static final _dateFormat = DateFormat(displayDatePattern);
|
|
static final _dateTimeFormat = DateFormat(displayDateTimePattern);
|
|
static final _apiDateFormat = DateFormat('yyyy-MM-dd');
|
|
|
|
static String displayDate(DateTime? date) {
|
|
if (date == null) return '-';
|
|
return _dateFormat.format(date.toLocal());
|
|
}
|
|
|
|
static String displayDateTime(DateTime? date) {
|
|
if (date == null) return '-';
|
|
return _dateTimeFormat.format(date.toLocal());
|
|
}
|
|
|
|
static String toApiDate(DateTime date) => _apiDateFormat.format(date);
|
|
|
|
static DateTime? parseApiDate(String? value) {
|
|
if (value == null || value.isEmpty) return null;
|
|
return DateTime.tryParse(value);
|
|
}
|
|
|
|
static String formatUserLastLogin(DateTime? value) {
|
|
if (value == null) return '—';
|
|
final local = value.toLocal();
|
|
final now = DateTime.now();
|
|
final today = DateTime(now.year, now.month, now.day);
|
|
final date = DateTime(local.year, local.month, local.day);
|
|
final dayDiff = today.difference(date).inDays;
|
|
final time = DateFormat('hh:mm a').format(local);
|
|
|
|
if (dayDiff == 0) return 'Today $time';
|
|
if (dayDiff == 1) return 'Yesterday';
|
|
if (dayDiff < 7) return '$dayDiff days ago';
|
|
return displayDateTime(local);
|
|
}
|
|
}
|
|
|
|
class CurrencyFormatter {
|
|
CurrencyFormatter._();
|
|
|
|
static final _formatter = NumberFormat.currency(
|
|
locale: 'en_IN',
|
|
symbol: '₹',
|
|
decimalDigits: 2,
|
|
);
|
|
|
|
static String format(double? amount) {
|
|
if (amount == null) return '-';
|
|
return _formatter.format(amount);
|
|
}
|
|
}
|