68 lines
2.1 KiB
Dart
68 lines
2.1 KiB
Dart
import 'package:intl/intl.dart';
|
|
|
|
class DateHelper {
|
|
static DateTime? parseToLocal(dynamic v) {
|
|
if (v == null) return null;
|
|
try {
|
|
// parse and convert UTC timestamp (with 'Z') correctly to local
|
|
return DateTime.parse(v.toString()).toLocal();
|
|
} catch (e) {
|
|
// fallback to tryParse without throwing
|
|
final parsed = DateTime.tryParse(v.toString());
|
|
return parsed?.toLocal();
|
|
}
|
|
}
|
|
|
|
// parse to local non nullable,
|
|
static DateTime parseToLocalNonNullable(dynamic v) {
|
|
final parsed = parseToLocal(v);
|
|
if (parsed == null) {
|
|
// return current local time if parsing fails
|
|
return DateTime.now();
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
// format to day, with date and month in indonesian, ex: Senin, 17 Sep 2025
|
|
static String formatToDayDateMonthIndonesia(DateTime date) {
|
|
final formatter = DateFormat('EEEE, dd MMMM yyyy', 'id_ID');
|
|
return formatter.format(date);
|
|
}
|
|
|
|
static String formatToWIBTime(DateTime date) {
|
|
// format time to indonesian (06:20 WIB)
|
|
final indonesianHour = date.hour.toString().padLeft(2, '0');
|
|
final indonesianMinute = date.minute.toString().padLeft(2, '0');
|
|
return '$indonesianHour:$indonesianMinute WIB';
|
|
}
|
|
|
|
static String statusUpcomingAttendance(DateTime timeStart, DateTime timeEnd) {
|
|
final now = DateTime.now();
|
|
if (now.isBefore(timeStart)) {
|
|
return 'Belum Dimulai';
|
|
} else if (now.isAfter(timeEnd)) {
|
|
return 'Sudah Selesai';
|
|
} else {
|
|
return 'Sedang Berlangsung';
|
|
}
|
|
}
|
|
|
|
static String countDownTimer(DateTime timeEnd, {DateTime? customNow}) {
|
|
final now = customNow ?? DateTime.now();
|
|
|
|
/// time in menit, jam, hari
|
|
final difference = timeEnd.difference(now);
|
|
if (difference.inSeconds <= 0) {
|
|
return 'Waktu Habis';
|
|
} else if (difference.inMinutes < 1) {
|
|
return '${difference.inSeconds} detik lagi';
|
|
} else if (difference.inHours < 1) {
|
|
return '${difference.inMinutes} menit lagi';
|
|
} else if (difference.inDays < 1) {
|
|
return '${difference.inHours} jam lagi';
|
|
} else {
|
|
return '${difference.inDays} hari lagi';
|
|
}
|
|
}
|
|
}
|