TIF_E41222181/lib/core/helper/date_helper.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';
}
}
}