import 'package:date_format/date_format.dart'; import 'package:get/get.dart'; import 'pickers/time_picker/model/pduration.dart'; class DateTool { /// 获取当前年月日时分秒 String getNowDateWithType(int type) { String dateStr = ''; // 获取当前时间对象 final DateTime now = DateTime.now(); //获取当前时间的年 final int year = now.year; //获取当前时间的月 final int month = now.month; //获取当前时间的日 final int day = now.day; //获取当前时间的时 final int hour = now.hour; //获取当前时间的分 final int minute = now.minute; //获取当前时间的秒 final int millisecond = now.millisecond; switch (type) { case 1: // 年月日时分秒 dateStr = '$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}'; break; case 2: // 年月日时分 dateStr = '$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; case 3: // 年月日时整点 dateStr = '$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00'; break; case 4: // 年月日 dateStr = '$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}'; break; case 5: // 时分秒 dateStr = '${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}'; break; case 6: // 时分 dateStr = '${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; case 7: // 小时整点 dateStr = '${hour.toString().padLeft(2, '0')}:00'; break; default: dateStr = '$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}'; break; } return dateStr; } /// 将时间戳传化为年月日时分秒 (年.月.日 时:分) // String dateToYMDHNStringWithDot(String timestamp){ // int time = int.parse(timestamp); // DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); // String appointmentDate = formatDate(nowDate, [yyyy,'.',mm,'.',dd,' ',HH,':',nn]); // return appointmentDate; // } /// 根据传入的PDuration及时间类型获取时间字符串 /// type 1: 年月日时分(2023-01-01 12:00) 2: 年月日(2023-01-01) 3: 时分(12:00) String getYMDHNDateString(PDuration p, int type) { final int? year = p.year == 0 ? DateTime.now().year : p.year; final int? month = p.month == 0 ? DateTime.now().month : p.month; final int? day = p.day == 0 ? DateTime.now().day : p.day; final int? hour = p.hour; final int? minute = p.minute; String dateStr = ''; switch (type) { case 1: // 年月日时分(2023-01-01 12:48) dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; case 2: // 年月日(2023-01-01) dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}'; break; case 3: // 时分(12:05) dateStr = '${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; case 4: // 年月日时分(2023-01-01 12:00)整点 dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00'; break; case 5: // 时分(12:00)整点 dateStr = '${hour.toString().padLeft(2, '0')}:00'; break; default: dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; } return dateStr; } /// 根据传入的PDuration及时间类型获取时间字符串 /// type 1: 年月日时分(2023-01-01 12:00) 2: 年月日(2023-01-01) 3: 时分(12:00) String getYMDHNDateStringWithDateTime(DateTime p, int type) { final int year = p.year == 0 ? DateTime.now().year : p.year; final int month = p.month == 0 ? DateTime.now().month : p.month; final int day = p.day == 0 ? DateTime.now().day : p.day; final int hour = p.hour; final int minute = p.minute; String dateStr = ''; switch (type) { case 1: // 年月日时分(2023-01-01 12:48) dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; case 2: // 年月日(2023-01-01) dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}'; break; case 3: // 时分(12:05) dateStr = '${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; default: dateStr = '$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; break; } return dateStr; } /// 日期转化为时间戳 /// type 0: 12:00 1: 其他 int dateToTimestamp(String dateStr, int type) { int timestamp = 0; if (type == 0) { final List timeParts = dateStr.split(':'); if (timeParts.length < 2) { return 0; } final DateTime now = DateTime.now(); final DateTime dateTime = DateTime(now.year, now.month, now.day, int.parse(timeParts[0]), int.parse(timeParts[1])); timestamp = dateTime.millisecondsSinceEpoch; } else { final DateTime dateTime = DateTime.parse(dateStr); timestamp = dateTime.millisecondsSinceEpoch; } return timestamp; } /// 日期转化为时间戳 /// type 0: 12:00 1: 其他 DateTime? dateToDateTime(String dateStr, int type) { final int timestamp = dateToTimestamp(dateStr, type); if (timestamp == 0) { return null; } else { return DateTime.fromMillisecondsSinceEpoch(timestamp); } } /// 将时间戳传化为年月日 (年-月-日 时:分) String dateToYMDHNString(String? timestamp) { timestamp ??= '0'; int time = int.parse(timestamp); if (timestamp.length == 10) { time = time * 1000; } final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); return appointmentDate; } /// 将时间戳传化为年月日 (年-月-日 时:分) String dateIntToYMDHNString(int? time) { time ??= 0; if (time.toString().length == 10) { time = time * 1000; } final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); return appointmentDate; } /// 将时间戳传化为年月日 (年-月-日) String dateToYMDString(String timestamp) { final int time = int.parse(timestamp); final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [yyyy, '-', mm, '-', dd]); return appointmentDate; } /// 将时间戳传化为年月日 (时:分) String dateToHNString(String timestamp) { final int time = int.parse(timestamp); final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [HH, ':', nn]); return appointmentDate; } /// 获取是否超过现在的时间 bool compareTimeIsOvertime(int endTiem) { final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime final DateTime now = DateTime.now(); // 获取当前时间 if (now.isAfter(dateTime)) { // 过期 return true; } else { return false; } } /// 获取两个距离当前时间相差几天 1705132260000 int compareTimeGetDaysFromNow(int endTiem) { final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime final DateTime now = DateTime.now(); // 获取当前时间 final Duration difference = dateTime.difference(now); // 计算两个日期之间的差异 final int days = difference.inDays; // 获取差异的天数 return days; } // 根据循环的循环周期转化为对应的整型(Bit0 -- 6 置位分别代表周日 -- 周六) int accordingTheCycleIntoTheCorrespondingNumber(List weekDay) { String weekStr = '00000000'; for (var day in weekDay) { final int index = day % 7; // 将周日的索引转换为 0 weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}'; } // 倒序 weekStr weekStr = weekStr.split('').reversed.join(''); final int weekRound = int.parse(weekStr, radix: 2); return weekRound; } /// 将时间戳传化为月 String dateToMMString(String? timestamp) { timestamp ??= '0'; int time = int.parse(timestamp); if (timestamp.length == 10) { time = time * 1000; } final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [mm]); return appointmentDate; } /// 将时间戳传化为日 String dateToDDString(String? timestamp) { timestamp ??= '0'; int time = int.parse(timestamp); if (timestamp.length == 10) { time = time * 1000; } final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [dd]); return appointmentDate; } /// 将时间戳传化为时分 String dateToHnString(String? timestamp) { timestamp ??= '0'; int time = int.parse(timestamp); if (timestamp.length == 10) { time = time * 1000; } final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); final String appointmentDate = formatDate(nowDate, [HH, ':', nn]); return appointmentDate; } }