228 lines
7.9 KiB
Dart
Executable File
228 lines
7.9 KiB
Dart
Executable File
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;
|
|
|
|
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<String> timeParts = dateStr.split(":");
|
|
if (timeParts.length < 2) {
|
|
return 0;
|
|
}
|
|
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;
|
|
}
|
|
|
|
/// 日期转化为时间戳
|
|
/// type 0: 12:00 1: 其他
|
|
DateTime? dateToDateTime(String dateStr, int type) {
|
|
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;
|
|
}
|
|
DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
|
|
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;
|
|
}
|
|
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;
|
|
}
|
|
}
|