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){ var dateStr = ''; // 获取当前时间对象 DateTime now = DateTime.now(); //获取当前时间的年 int year = now.year; //获取当前时间的月 int month = now.month; //获取当前时间的日 int day = now.day; //获取当前时间的时 int hour = now.hour; //获取当前时间的分 int minute = now.minute; //获取当前时间的秒 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){ var year = p.year == 0 ? DateTime.now().year : p.year; var month = p.month == 0 ? DateTime.now().month : p.month; var day = p.day == 0 ? DateTime.now().day : p.day; var hour = p.hour == 0 ? DateTime.now().hour : p.hour; var minute = p.minute == 0 ? DateTime.now().minute : p.minute; var 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; } /// 日期转化为时间戳 /// type 0: 12:00 1: 其他 int dateToTimestamp(String dateStr, int type){ int timestamp = 0; if(type == 0){ List timeParts = dateStr.split(":"); DateTime now = DateTime.now(); DateTime dateTime = DateTime(now.year, now.month, now.day, int.parse(timeParts[0]), int.parse(timeParts[1])); timestamp = dateTime.millisecondsSinceEpoch; }else{ DateTime dateTime = DateTime.parse(dateStr); timestamp = dateTime.millisecondsSinceEpoch; } return timestamp; } /// 将时间戳传化为年月日 (年-月-日 时:分) String dateToYMDHNString(String timestamp){ int time = int.parse(timestamp); if(timestamp.length == 10){ time = time * 1000; } DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); String appointmentDate = formatDate(nowDate, [yyyy,'-',mm,'-',dd,' ',HH,':',nn]); return appointmentDate; } /// 将时间戳传化为年月日 (年-月-日) String dateToYMDString(String timestamp){ int time = int.parse(timestamp); DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); String appointmentDate = formatDate(nowDate, [yyyy,'-',mm,'-',dd]); return appointmentDate; } /// 将时间戳传化为年月日 (时:分) String dateToHNString(String timestamp){ int time = int.parse(timestamp); DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); String appointmentDate = formatDate(nowDate, [HH,':',nn]); return appointmentDate; } /// 获取是否超过现在的时间 bool compareTimeIsOvertime(int endTiem){ DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime DateTime now = DateTime.now(); // 获取当前时间 if (now.isAfter(dateTime)) { // 过期 return true; } else { return false; } } /// 获取两个距离当前时间相差几天 1705132260000 int compareTimeGetDaysFromNow(int endTiem){ DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime DateTime now = DateTime.now(); // 获取当前时间 Duration difference = dateTime.difference(now); // 计算两个日期之间的差异 int days = difference.inDays; // 获取差异的天数 return days; } // 根据循环的循环周期转化为对应的整型(Bit0 -- 6 置位分别代表周日 -- 周六) int accordingTheCycleIntoTheCorrespondingNumber(List weekDay){ var weekStr = "00000000"; for (var day in weekDay) { int index = day % 7; // 将周日的索引转换为 0 weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}'; } // 倒序 weekStr weekStr = weekStr.split('').reversed.join(''); int weekRound = int.parse(weekStr, radix: 2); return weekRound; } }