2024-04-26 15:38:59 +08:00

186 lines
7.0 KiB
Dart

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<String> 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;
}
}