当前位置:网站首页>.net(C#)获取两个日期间隔的年月日
.net(C#)获取两个日期间隔的年月日
2022-08-04 23:34:00 【在路上走着走着】
年份:不满一年,算0年
月份:当前月,1号到月底算1月,2号到次月1号,3号到次月2号,依次类推,算1个月
天数:包含起止日期的天数
/// <summary>
///
/// </summary>
/// <param name="MinDate"></param>
/// <param name="MaxDate"></param>
/// <returns></returns>
private static GetDiffDateModel GetDiffDate(DateTime MinDate, DateTime MaxDate)
{
GetDiffDateModel result = new GetDiffDateModel();
//只比较年月日
MinDate = new DateTime(MinDate.Year, MinDate.Month, MinDate.Day);
MaxDate = new DateTime(MaxDate.Year, MaxDate.Month, MaxDate.Day);
if (MinDate >= MaxDate)
{
return result;
}
#region 年
#region 案例
/* #2022.01.01 2022.12.29 2022.12.31 0 #2022.01.01 2022.12.30 2022.12.31 0 #2022.01.01 2022.12.31 2022.12.31 1 #2022.01.01 2023.12.29 2023.12.31 1 #2022.01.01 2023.12.30 2023.12.31 1 #2022.01.01 2023.12.31 2023.12.31 2 #2022.01.02 2022.12.29 2023.01.01 0 #2022.01.02 2022.12.30 2023.01.01 0 #2022.01.02 2022.12.31 2023.01.01 0 #2022.01.03 2023.01.01 2023.01.02 0 #2022.01.03 2023.01.02 2023.01.02 1 #2022.01.03 2023.12.31 2023.01.02 1 #2022.01.03 2024.01.01 2024.01.02 2 */
#endregion
var _year = MaxDate.Year - MinDate.Year;
if (MinDate.Month == 1 && MinDate.Day == 1)
{
//如果是当前最后一天,年份+1
if (MaxDate == new DateTime(MaxDate.Year, 12, 31))
{
_year++;
}
}
else
{
if (_year == 0)//同一年
{
_year = 0;
}
else
{
if (MinDate.AddYears(_year).AddDays(-1) > MaxDate)
{
_year--;
}
}
}
result.Year = _year;
#endregion
#region 月
#region 案例
/* 2022年8月1号~2022年08月30号 2022年08月31号 算0月 2022年8月1号~2022年08月31号 2022年08月31号 算1月 2022年8月3号~2022年09月01号 2022年09月02号 算0月 2022年8月3号~2022年09月02号 2022年09月02号 算1月 2022年8月3号~2022年09月30号 2022年09月02号 算1月 2022年8月3号~2022年09月31号 2022年09月02号 算1月 2022年8月3号~2022年10月01号 2022年10月02号 算1月 2022年8月3号~2022年10月02号 2022年10月02号 算2月 */
#endregion
/* 逻辑:先把年的部分去掉,然后比较剩下的月份 */
var currMinDate = MinDate.AddYears(result.Year);
var _month = MaxDate.Month - currMinDate.Month;
if (currMinDate.Day == 1)
{
//如果是当月最后一天,月份+1
if (MaxDate.Day == new DateTime(MaxDate.Year, MaxDate.Month, 1).AddMonths(1).AddDays(-1).Day)
{
_month++;
}
}
else
{
if (_month == 0)//同一月
{
_month = 0;
}
else
{
if (currMinDate.AddMonths(_month).AddDays(-1) > MaxDate)
{
_month--;
}
}
}
result.Month = _month + (result.Year * 12);
#endregion
#region 日
result.Day = (MaxDate.Date - MinDate.Date).Days + 1;
#endregion
return result;
}
public class GetDiffDateModel
{
public int Year {
get; set; }
public int Month {
get; set; }
public int Day {
get; set; }
}
边栏推荐
- The role of @ Import annotations as well as how to use
- node中package解析、npm 命令行npm详解,node中的common模块化,npm、nrm两种方式查看源和切换镜像
- PID控制器改进笔记之七:改进PID控制器之防超调设定
- DNS常见资源记录类型详解
- 2022年华数杯数学建模
- NebulaGraph v3.2.0 Release Note,对查询最短路径的性能等多处优化
- The role of @Async annotation and how to implement asynchronous listening mechanism
- Web安全开发 | 青训营笔记
- 生产者消费者问题
- MySQL基础篇【聚合函数】
猜你喜欢
随机推荐
App测试和Web测试的区别
Kernel函数解析之kernel_restart
Pytest学习-Fixture
一点点读懂thermal(一)
ClickHouse 二级索引
@Import注解的作用以及如何使用
【CVA估值训练营】财务建模指南——第一讲
【无标题】
Controller层代码这么写,简洁又优雅!
吐槽 | 参加IT培训的正确姿势
~ hand AHB - APB Bridge 】 【 AMBA AHB bus
web3.js
Ab3d.PowerToys and Ab3d.DXEngine Crack
对写作的一些感悟
七牛云图片上传
npm基本操作及命令详解
typeScript-部分应用函数
C语言实现扫雷 附带源代码
游戏3D建模入门,有哪些建模软件可以选择?
被领导拒绝涨薪申请,跳槽后怒涨9.5K,这是我的心路历程