public class DateHelper
{
#region 周
/// <summary>
/// 获取时间所处周的第一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfWeek(DateTime date)
{
//星期一为第一天
var weekNow = Convert.ToInt32(date.DayOfWeek);
//因为是以星期一为第一天,weekNow,要向前推6天。
weekNow = (weekNow == 0 ? (7 - 1) : (weekNow - 1));
var dayDiff = (-1) * weekNow;
//本周第一天
return date.AddDays(dayDiff);
}
/// <summary>
/// 获取时间所处周的最后一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfWeek(DateTime date)
{
//星期天为最后一天
var lastWeekDay = Convert.ToInt32(date.DayOfWeek);
lastWeekDay = lastWeekDay == 0 ? (7 - lastWeekDay) : lastWeekDay;
var lastWeekDiff = (7 - lastWeekDay);
//本周最后一天
return date.AddDays(lastWeekDiff);
}
#endregion
#region 月
/// <summary>
/// 获取时间所处月的第一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfMonth(DateTime date)
{
return date.AddDays(1 - date.Day);
}
/// <summary>
/// 获取时间所处月的最后一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfMonth(DateTime date)
{
return date.AddDays(1 - date.Day).AddMonths(1).AddDays(-1);
}
#endregion
#region 季度
/// <summary>
/// 获取时间所处季度的第一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfQuarter(DateTime date)
{
return date.AddMonths(0 - (date.Month - 1) % 3).AddDays(1 - date.Day);
}
/// <summary>
/// 获取时间所处季度的最后一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfQuarter(DateTime date)
{
return date.AddMonths(0 - (date.Month - 1) % 3).AddDays(1 - date.Day).AddMonths(3).AddDays(-1);
}
#endregion
#region 半年
/// <summary>
/// 获取所处时间半年的第一天(上半年或下半年)
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfHalfYear(DateTime date)
{
if (date.Date < new DateTime(date.Year, 7, 1))
{
return new DateTime(date.Year, 1, 1);
}
return new DateTime(date.Year, 7, 1);
}
/// <summary>
/// 获取所处时间半年的最后一天(上半年或下半年)
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfHalfYear(DateTime date)
{
if (date.Date < new DateTime(date.Year, 7, 1))
{
return new DateTime(date.Year, 7, 1).AddDays(-1);
}
return new DateTime(date.Year, 1, 1).AddYears(1).AddDays(-1);
}
#endregion
#region 年
/// <summary>
/// 获取时间所处年的第一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfYear(DateTime date)
{
return new DateTime(date.Year, 1, 1);
}
/// <summary>
/// 获取时间所处年的最后一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfYear(DateTime date)
{
return new DateTime(date.Year, 1, 1).AddYears(1).AddDays(-1);
}
#endregion
#region 相差天数
/// <summary>
/// 两日期之间相差天数
/// </summary>
/// <param name="starTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static int DifferDays(DateTime? starTime, DateTime? endTime)
{
var result = 0;
if (starTime.HasValue && endTime.HasValue)
{
return endTime.Value.Subtract(starTime.Value).Days;
}
return result;
}
#endregion
#region 相差周数
public static int DifferWeeks(DateTime? starTime, DateTime? endTime)
{
int result = 0;
if (starTime.HasValue && endTime.HasValue)
{
var lastTime = GetLastDayOfWeek(starTime.Value);
while (lastTime < endTime)
{
result++;
lastTime = lastTime.AddDays(7);
}
}
return result;
}
#endregion
#region 相差月数
/// <summary>
/// 相差月数
/// </summary>
/// <param name="starTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static int DifferMonths(DateTime? starTime, DateTime? endTime)
{
var result = 0;
if (starTime.HasValue && endTime.HasValue)
{
return (endTime.Value.Year - starTime.Value.Year) * 12 +
(endTime.Value.Month - starTime.Value.Month);
}
return result;
}
#endregion
#region 相差季度
/// <summary>
/// 相差季度
/// </summary>
/// <param name="starTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static int DifferQuarters(DateTime? starTime, DateTime? endTime)
{
var result = 0;
if (starTime.HasValue && endTime.HasValue)
{
var lastTime = GetLastDayOfQuarter(starTime.Value);
while (lastTime < endTime)
{
result++;
lastTime = lastTime.AddMonths(3);
}
}
return result;
}
#endregion
#region 相差半年
/// <summary>
/// 相差半年
/// </summary>
/// <param name="starTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static int DifferHalfYears(DateTime? starTime, DateTime? endTime)
{
var result = 0;
if (starTime.HasValue && endTime.HasValue)
{
var lastTime = GetLastDayOfHalfYear(starTime.Value);
while (lastTime < endTime)
{
result++;
lastTime = lastTime.AddMonths(6);
}
}
return result;
}
#endregion
#region 相差年数
/// <summary>
/// 相差年数
/// </summary>
/// <param name="starTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static int DifferYears(DateTime? starTime, DateTime? endTime)
{
var result = 0;
if (starTime.HasValue && endTime.HasValue)
{
return endTime.Value.Year - starTime.Value.Year;
}
return result;
}
#endregion
#region 获取两个日期之间的所有时间集合
/// <summary>
/// 获取两个日期之间的所有时间集合
/// </summary>
/// <param name="beginDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static List<string> GetDateTimeList(DateTime beginDate, DateTime endDate)
{
var result = new List<string>();
var dateTime = beginDate;
while (endDate >= dateTime)
{
var item = dateTime.ToString("yy-MM-dd");
result.Add(item);
dateTime = dateTime.AddDays(1);
}
return result;
}
#endregion
}