convertToSaveDate static method
//////
esta funcion recibe un string con una fecha en formato DD/MM/YYYY y devuelve la fecha en formato ISODate (YYYY-MM-DDTHH:MM:SSZ) si la fecha es válida, de lo contrario devuelve null.
Parámetros:
fechaString(String): La cadena de fecha en formato DD/MM/YYYY.
Retorna:
String?: La fecha en formato ISODate (YYYY-MM-DDTHH:MM:SSZ) si es válida, de lo contrario null.
Ejemplo:
String? fechaISO = convertToISODate('31/12/2021');
print(fechaISO); // Imprime: 2021-12-31T00:00:00.000Z
La función convertToISODate realiza las siguientes operaciones:
Implementation
static String? convertToSaveDate(String fechaString) {
///Expresion regular para validar que la fecha ya no venga en su formato de guardado
///Si la fecha viene en el formato : YYYY-MM-DDTHH:MM:SSZ devuelve la misma fecha
final regex = RegExp(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$');
bool fechaValida = regex.hasMatch(fechaString);
if (fechaValida) return fechaString;
///expresion regular que valida una fecha en formato DD/MM/YYYY
final RegExp dateRegExp = RegExp(r'^(\d{2})\/(\d{2})\/(\d{4})$');
/// Valida si la fecha cumple con el formato DD/MM/YYYY
if (dateRegExp.hasMatch(fechaString)) {
/// extrae el día, mes y año de la cadena de fecha
final match = dateRegExp.firstMatch(fechaString);
int day = int.parse(match?.group(1) ?? '0');
int month = int.parse(match?.group(2) ?? '0');
int year = int.parse(match?.group(3) ?? '0');
/// Intenta crear un objeto DateTime con los valores de día, mes y año
try {
DateTime dateTime = DateTime(year, month, day);
/// Verifica si la fecha es válida
if (dateTime.day == day &&
dateTime.month == month &&
dateTime.year == year) {
String formattedDate = "${dateTime.year.toString().padLeft(4, '0')}-"
"${dateTime.month.toString().padLeft(2, '0')}-"
"${dateTime.day.toString().padLeft(2, '0')}";
/// Devuelve la fecha en formato "YYYY-MM-DD"
return formattedDate;
// .toUtc().toIso8601String();
} else {
FlutterUtilsProvider.logDebug('La fecha no es válida: $fechaString');
/// Si la fecha no es válida, devuelve null
return null;
}
} catch (error) {
FlutterUtilsProvider.logDebug(
'Error al convertir la fecha $fechaString a ISODate: $error');
/// Si la creación de DateTime falla, devuelve null
return null;
}
} else {
FlutterUtilsProvider.logDebug(
'La fecha no cumple con el formato DD/MM/YYYY $fechaString');
/// Si la fecha no cumple con el formato DD/MM/YYYY, devuelve null
return null;
}
}