2023-09-04 15:00:42 +08:00
|
|
|
import 'package:date_format/date_format.dart';
|
2024-03-28 13:46:35 +08:00
|
|
|
import 'package:get/get.dart';
|
2023-09-04 15:00:42 +08:00
|
|
|
|
2024-03-25 15:03:02 +08:00
|
|
|
import 'pickers/time_picker/model/pduration.dart';
|
|
|
|
|
|
2023-08-29 11:02:52 +08:00
|
|
|
class DateTool {
|
2024-03-25 15:03:02 +08:00
|
|
|
/// 获取当前年月日时分秒
|
2024-05-03 14:38:09 +08:00
|
|
|
String getNowDateWithType(int type) {
|
2024-05-24 10:59:48 +08:00
|
|
|
String dateStr = '';
|
2024-04-07 14:03:59 +08:00
|
|
|
// 获取当前时间对象
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime now = DateTime.now();
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的年
|
2024-05-24 10:59:48 +08:00
|
|
|
final int year = now.year;
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的月
|
2024-05-24 10:59:48 +08:00
|
|
|
final int month = now.month;
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的日
|
2024-05-24 10:59:48 +08:00
|
|
|
final int day = now.day;
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的时
|
2024-05-24 10:59:48 +08:00
|
|
|
final int hour = now.hour;
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的分
|
2024-05-24 10:59:48 +08:00
|
|
|
final int minute = now.minute;
|
2024-04-07 14:03:59 +08:00
|
|
|
//获取当前时间的秒
|
2024-05-24 10:59:48 +08:00
|
|
|
final int millisecond = now.millisecond;
|
2024-04-07 14:03:59 +08:00
|
|
|
|
2024-05-03 14:38:09 +08:00
|
|
|
switch (type) {
|
2024-04-07 14:03:59 +08:00
|
|
|
case 1:
|
|
|
|
|
// 年月日时分秒
|
2024-05-03 14:38:09 +08:00
|
|
|
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')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
// 年月日时分
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
// 年月日时整点
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
// 年月日
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
// 时分秒
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
// 时分
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
// 小时整点
|
|
|
|
|
dateStr = '${hour.toString().padLeft(2, '0')}:00';
|
|
|
|
|
break;
|
|
|
|
|
default:
|
2024-05-03 14:38:09 +08:00
|
|
|
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')}';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return dateStr;
|
|
|
|
|
}
|
2023-09-04 15:00:42 +08:00
|
|
|
|
2024-03-25 15:03:02 +08:00
|
|
|
/// 将时间戳传化为年月日时分秒 (年.月.日 时:分)
|
|
|
|
|
// 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)
|
2024-05-03 14:38:09 +08:00
|
|
|
String getYMDHNDateString(PDuration p, int type) {
|
2024-05-24 10:59:48 +08:00
|
|
|
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;
|
2024-03-25 15:03:02 +08:00
|
|
|
|
2024-05-24 10:59:48 +08:00
|
|
|
String dateStr = '';
|
2024-05-03 14:38:09 +08:00
|
|
|
switch (type) {
|
2024-03-25 15:03:02 +08:00
|
|
|
case 1:
|
2024-04-07 14:03:59 +08:00
|
|
|
// 年月日时分(2023-01-01 12:48)
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
|
|
|
|
break;
|
2024-03-25 15:03:02 +08:00
|
|
|
case 2:
|
|
|
|
|
// 年月日(2023-01-01)
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
|
2024-03-25 15:03:02 +08:00
|
|
|
break;
|
|
|
|
|
case 3:
|
2024-04-07 14:03:59 +08:00
|
|
|
// 时分(12:05)
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-03-25 15:03:02 +08:00
|
|
|
break;
|
2024-04-07 14:03:59 +08:00
|
|
|
case 4:
|
|
|
|
|
// 年月日时分(2023-01-01 12:00)整点
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00';
|
2024-04-07 14:03:59 +08:00
|
|
|
break;
|
|
|
|
|
case 5:
|
2024-05-03 14:38:09 +08:00
|
|
|
// 时分(12:00)整点
|
2024-04-07 14:03:59 +08:00
|
|
|
dateStr = '${hour.toString().padLeft(2, '0')}:00';
|
|
|
|
|
break;
|
2024-03-25 15:03:02 +08:00
|
|
|
default:
|
2024-05-03 14:38:09 +08:00
|
|
|
dateStr =
|
|
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-03-25 15:03:02 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return dateStr;
|
2023-09-04 15:00:42 +08:00
|
|
|
}
|
2023-09-15 16:04:11 +08:00
|
|
|
|
2024-06-04 09:12:41 +08:00
|
|
|
/// 根据传入的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:
|
2024-11-12 16:49:51 +08:00
|
|
|
// 年月日时分(2023-01-01 12:48)
|
2024-06-04 09:12:41 +08:00
|
|
|
dateStr =
|
2024-11-12 16:49:51 +08:00
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-06-04 09:12:41 +08:00
|
|
|
break;
|
|
|
|
|
case 2:
|
2024-11-12 16:49:51 +08:00
|
|
|
// 年月日(2023-01-01)
|
2024-06-04 09:12:41 +08:00
|
|
|
dateStr =
|
2024-11-12 16:49:51 +08:00
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
|
2024-06-04 09:12:41 +08:00
|
|
|
break;
|
|
|
|
|
case 3:
|
2024-11-12 16:49:51 +08:00
|
|
|
// 时分(12:05)
|
2024-06-04 09:12:41 +08:00
|
|
|
dateStr =
|
2024-11-12 16:49:51 +08:00
|
|
|
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-06-04 09:12:41 +08:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
dateStr =
|
2024-11-12 16:49:51 +08:00
|
|
|
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
|
2024-06-04 09:12:41 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return dateStr;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-25 15:03:02 +08:00
|
|
|
/// 日期转化为时间戳
|
|
|
|
|
/// type 0: 12:00 1: 其他
|
2024-05-03 14:38:09 +08:00
|
|
|
int dateToTimestamp(String dateStr, int type) {
|
2024-03-25 15:03:02 +08:00
|
|
|
int timestamp = 0;
|
2024-05-03 14:38:09 +08:00
|
|
|
if (type == 0) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final List<String> timeParts = dateStr.split(':');
|
2024-05-04 13:36:17 +08:00
|
|
|
if (timeParts.length < 2) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime now = DateTime.now();
|
|
|
|
|
final DateTime dateTime = DateTime(now.year, now.month, now.day,
|
2024-05-03 14:38:09 +08:00
|
|
|
int.parse(timeParts[0]), int.parse(timeParts[1]));
|
2024-03-25 15:03:02 +08:00
|
|
|
timestamp = dateTime.millisecondsSinceEpoch;
|
2024-05-03 14:38:09 +08:00
|
|
|
} else {
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime dateTime = DateTime.parse(dateStr);
|
2024-03-25 15:03:02 +08:00
|
|
|
timestamp = dateTime.millisecondsSinceEpoch;
|
|
|
|
|
}
|
|
|
|
|
return timestamp;
|
|
|
|
|
}
|
2023-09-15 16:04:11 +08:00
|
|
|
|
2024-05-04 13:36:17 +08:00
|
|
|
/// 日期转化为时间戳
|
|
|
|
|
/// type 0: 12:00 1: 其他
|
|
|
|
|
DateTime? dateToDateTime(String dateStr, int type) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final int timestamp = dateToTimestamp(dateStr, type);
|
2024-05-04 13:36:17 +08:00
|
|
|
if (timestamp == 0) {
|
|
|
|
|
return null;
|
|
|
|
|
} else {
|
|
|
|
|
return DateTime.fromMillisecondsSinceEpoch(timestamp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-25 15:03:02 +08:00
|
|
|
/// 将时间戳传化为年月日 (年-月-日 时:分)
|
2024-05-03 14:38:09 +08:00
|
|
|
String dateToYMDHNString(String? timestamp) {
|
|
|
|
|
timestamp ??= '0';
|
2024-03-25 15:03:02 +08:00
|
|
|
int time = int.parse(timestamp);
|
2024-05-03 14:38:09 +08:00
|
|
|
if (timestamp.length == 10) {
|
|
|
|
|
time = time * 1000;
|
|
|
|
|
}
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
|
|
|
|
|
final String appointmentDate =
|
|
|
|
|
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
|
2024-05-03 14:38:09 +08:00
|
|
|
return appointmentDate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// 将时间戳传化为年月日 (年-月-日 时:分)
|
|
|
|
|
String dateIntToYMDHNString(int? time) {
|
|
|
|
|
time ??= 0;
|
|
|
|
|
if (time.toString().length == 10) {
|
2024-04-16 17:44:38 +08:00
|
|
|
time = time * 1000;
|
|
|
|
|
}
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
|
|
|
|
|
final String appointmentDate =
|
|
|
|
|
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
|
2023-09-15 16:04:11 +08:00
|
|
|
return appointmentDate;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-28 13:46:35 +08:00
|
|
|
/// 将时间戳传化为年月日 (年-月-日)
|
2024-05-03 14:38:09 +08:00
|
|
|
String dateToYMDString(String timestamp) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final int time = int.parse(timestamp);
|
|
|
|
|
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
|
2024-06-04 14:44:04 +08:00
|
|
|
final String appointmentDate =
|
|
|
|
|
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd]);
|
2023-09-15 16:04:11 +08:00
|
|
|
return appointmentDate;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-25 15:03:02 +08:00
|
|
|
/// 将时间戳传化为年月日 (时:分)
|
2024-05-03 14:38:09 +08:00
|
|
|
String dateToHNString(String timestamp) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final int time = int.parse(timestamp);
|
|
|
|
|
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
|
|
|
|
|
final String appointmentDate = formatDate(nowDate, <String>[HH, ':', nn]);
|
2023-09-15 16:04:11 +08:00
|
|
|
return appointmentDate;
|
|
|
|
|
}
|
2024-03-19 18:04:51 +08:00
|
|
|
|
|
|
|
|
/// 获取是否超过现在的时间
|
2024-05-03 14:38:09 +08:00
|
|
|
bool compareTimeIsOvertime(int endTiem) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime dateTime =
|
2024-05-03 14:38:09 +08:00
|
|
|
DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime now = DateTime.now(); // 获取当前时间
|
2024-03-19 18:04:51 +08:00
|
|
|
if (now.isAfter(dateTime)) {
|
|
|
|
|
// 过期
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// 获取两个距离当前时间相差几天 1705132260000
|
2024-05-03 14:38:09 +08:00
|
|
|
int compareTimeGetDaysFromNow(int endTiem) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime dateTime =
|
2024-05-03 14:38:09 +08:00
|
|
|
DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime
|
2024-05-24 10:59:48 +08:00
|
|
|
final DateTime now = DateTime.now(); // 获取当前时间
|
|
|
|
|
final Duration difference = dateTime.difference(now); // 计算两个日期之间的差异
|
|
|
|
|
final int days = difference.inDays; // 获取差异的天数
|
2024-03-19 18:04:51 +08:00
|
|
|
return days;
|
|
|
|
|
}
|
2024-04-22 11:16:37 +08:00
|
|
|
|
|
|
|
|
// 根据循环的循环周期转化为对应的整型(Bit0 -- 6 置位分别代表周日 -- 周六)
|
2024-05-03 14:38:09 +08:00
|
|
|
int accordingTheCycleIntoTheCorrespondingNumber(List weekDay) {
|
2024-05-24 10:59:48 +08:00
|
|
|
String weekStr = '00000000';
|
2024-04-22 11:16:37 +08:00
|
|
|
for (var day in weekDay) {
|
2024-05-24 10:59:48 +08:00
|
|
|
final int index = day % 7; // 将周日的索引转换为 0
|
2024-05-03 14:38:09 +08:00
|
|
|
weekStr =
|
|
|
|
|
'${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
|
2024-04-22 11:16:37 +08:00
|
|
|
}
|
|
|
|
|
// 倒序 weekStr
|
|
|
|
|
weekStr = weekStr.split('').reversed.join('');
|
2024-05-24 10:59:48 +08:00
|
|
|
final int weekRound = int.parse(weekStr, radix: 2);
|
2024-04-22 11:16:37 +08:00
|
|
|
return weekRound;
|
|
|
|
|
}
|
2024-05-03 14:38:09 +08:00
|
|
|
}
|