using ERP.Framework.Constants;
namespace System
{
public static class DateTimeExtension
{
///
/// 获取当前日期时间与指定日期时间之间的年龄差
///
/// 指定日期
/// 返回两个日期之间的年龄差
public static int GetAge(this DateTime @this)
{
//如果当年月份小于指定日期的月份,
//或者当年月份等于指定日期的月份但当年日期小于指定日期的日期,
//则返回当前年份与指定日期年份之间的差值减一
if (DateTime.Today.Month < @this.Month ||
DateTime.Today.Month == @this.Month &&
DateTime.Today.Day < @this.Day)
{
return DateTime.Today.Year - @this.Year - 1;
}
// 返回当前年份与指定日期年份之间的差值
return DateTime.Today.Year - @this.Year;
}
///
/// 判断当前日期是否为工作日
///
/// 要进行判断的日期
/// 当前日期是工作日返回 true ,当前日期是周末返回 false
public static bool IsWeekDay(this DateTime @this)
{
return !(@this.DayOfWeek == DayOfWeek.Saturday || @this.DayOfWeek == DayOfWeek.Sunday);
}
///
/// 判断当前日期是否为周末
///
/// 要进行判断的日期
/// 当前日期是周末返回 true ,当前日期是工作日返回 false
public static bool IsWeekendDay(this DateTime @this)
{
return @this.DayOfWeek == DayOfWeek.Saturday || @this.DayOfWeek == DayOfWeek.Sunday;
}
///
/// 获取当前日期所在星期的第一天,即本周的起始日期
///
/// 要进行处理的日期
/// 星期的起始日,默认为星期天
/// 返回本周的起始日期
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startDayOfWeek = DayOfWeek.Sunday)
{
var start = new DateTime(dt.Year, dt.Month, dt.Day);
if (start.DayOfWeek != startDayOfWeek)
{
var d = startDayOfWeek - start.DayOfWeek;
if (startDayOfWeek <= start.DayOfWeek)
{
return start.AddDays(d);
}
return start.AddDays(-7 + d);
}
return start;
}
///
/// 将当前日期时间转换为 Unix 时间戳(以秒为单位)
///
/// 要进行转换的日期时间
/// 返回 Unix 时间戳
public static TimeSpan ToEpochTimeSpan(this DateTime @this) => @this.ToUniversalTime().Subtract(new DateTime(1970, 1, 1));
///
/// 判断当前日期是否在指定日期范围内
///
/// 要进行判断的日期<
/// 日期范围的最小值
/// 日期范围的最大值
/// 当前日期在指定的日期范围内返回 true ,当前日期不在指定的日期范围内返回 false
public static bool InRange(this DateTime @this, DateTime minValue, DateTime maxValue)
{
return @this.CompareTo(minValue) >= 0 && @this.CompareTo(maxValue) <= 0;
}
///
/// 返回日期字符串 (yyyy/MM/dd)
///
/// 当前日期
/// 日期字符串
public static string ToDateString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Date);
}
///
/// 返回日期字符串 (yyyy/MM/dd HH:mm)
///
/// 当前日期
/// 日期字符串
public static string ToDateShortString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Date_Short);
}
///
/// 返回日期字符串 (yyyy/MM/dd HH:mm:ss)
///
/// 当前日期
/// 日期字符串
public static string ToDateLongString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Date_Long);
}
///
/// 返回日期字符串 (yyyy-MM-dd)
///
/// 当前日期
/// 日期字符串
public static string ToDateTimeString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Dete_Time);
}
///
/// 返回日期字符串 (yyyy-MM-dd HH:mm)
///
/// 当前日期
/// 日期字符串
public static string ToDateTimeShortString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Dete_Time_Short);
}
///
/// 返回日期字符串 (yyyy-MM-dd HH:mm:ss)
///
/// 当前日期
/// 日期字符串
public static string ToDateTimeLongString(this DateTime @this)
{
return @this.ToString(DateTimeConstant.Dete_Time_Long);
}
}
}