C#中获得月份中的第一天和最后一天和判断闰年

获取月份首尾日期的C#实现
获取一个月份中最早的一天和最后的一天。在C#的DateTime类中,已经提供了现成的函数,下面分别用两个简单的函数表示:

 

private  DateTime GetFirstDayOfMonth( int  Year, int  Month)
        {
            
// 你见过不是从1号开始的月份么?没有
            
// 那么,直接返回给调用者吧!
            
// 良好的一个编程习惯就是你的代码让人家看了简单易懂
             return  Convert.ToDateTime(Year.ToString()  +   " - "   +  Month.ToString()  +   " -1 " );
        }

        
private  DateTime GetLastDayOfMonth( int  Year,  int  Month)
        {
            
// 这里的关键就是 DateTime.DaysInMonth 获得一个月中的天数
             int  Days  =  DateTime.DaysInMonth(Year, Month);
            
return  Convert.ToDateTime(Year.ToString()  +   " - "   +  Month.ToString()  +   " - "   +  Days.ToString());
            
        }


在上面两个函数中,我没有写出前面作者那样更多的重载,相信读者您会自己根据需要自己实现的。而且,我也没有对输入参数进行校验,但我还是建议你对参数进行有效性校验一下!

     DateTime类中还有一个 DateTime.IsLeapYear( int year) 的函数,用来判断一年是不是闰年,以后,你自己可不用去写什么4的倍数,100整除的判断闰年的方法了。

     享受.NET吧!

---------------------------------------------------------

另一个: http://www.cnblogs.com/s021368/articles/1802015.html

        /// <summary>
        /// 取得某月的第一天
        /// </summary>
        /// <param name="datetime">要取得月份第一天的时间</param>
        /// <returns></returns>
        private DateTime FirstDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day);
        }

        /**//// <summary>
        /// 取得某月的最后一天
        /// </summary>
        /// <param name="datetime">要取得月份最后一天的时间</param>
        /// <returns></returns>
        private DateTime LastDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
        }

        /**//// <summary>
        /// 取得上个月第一天
        /// </summary>
        /// <param name="datetime">要取得上个月第一天的当前时间</param>
        /// <returns></returns>
        private DateTime FirstDayOfPreviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(-1);
        }

        /**//// <summary>
        /// 取得上个月的最后一天
        /// </summary>
        /// <param name="datetime">要取得上个月最后一天的当前时间</param>
        /// <returns></returns>
        private DateTime LastDayOfPrdviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddDays(-1);
        }

http://www.cn-web.com/shtml/article/net/csharp/2009/02/04/366.shtml

 =================================================

.Net中获取一周第一天、最后一天,一月第一天、最后一天 

DateTime dt = DateTime.Now;
        //本月第一天时间   
        DateTime dt_First = dt.AddDays(-(dt.Day) + 1);
        Label1.Text = dt_First.ToString("yyyy-MM-dd");
        //将本月月数+1 
        DateTime dt2 = dt.AddMonths(1);
        //本月最后一天时间 
        DateTime dt_Last = dt2.AddDays(-(dt.Day));
        Label2.Text = dt_Last.ToString("yyyy-MM-dd");
        int weeknow = Convert.ToInt32(System.DateTime.Now.DayOfWeek);
        int daydiff = (-1) * weeknow + 1;
        int dayadd = 7 - weeknow;

   //本周第一天
        lblBegin.Text = System.DateTime.Now.AddDays(daydiff).ToString("yyyy-MM-dd");

       //本周最后一天
        lblEnd.Text = System.DateTime.Now.AddDays(dayadd).ToString("yyyy-MM-dd");

-----------------------------------------------------------

JS版: http://www.cnblogs.com/wangsj/archive/2010/02/14/1668288.html

<script language="javascript">
 2  function selDate(y, m)
 3 {    
 4     //输出当月1号字符串
 5      document.form1.startDT.value=y+"-"+m+"-1";
 6     //计算下个月的年份(y)、月份值(m)
 7      if(m==12)
 8     {
 9         y++;
10         m=1;
11     }
12     else
13     {
14         m++;
15     }    
16     //生成下个月1日的Date值
17     var dt=new Date(y, m-11);  //月份值0--11
18     //一天差值=86400000,将下月1日转换成数值,再相减,得上月最后一天Date值
19     var n=Date.parse(dt);
20     n -= 86400000;
21     var dt1=new Date(n);     
22     //输出当月最后一天日期字符串
23     document.form1.stopDT.value=dt1.getYear()+"-"+(dt1.getMonth()+1)+"-"+dt1.getDate();
24 }
25 </script>

### JavaScript 获取当前月份第一天最后一天 以下是两种方法来实现获取当前月份第一天最后一天: #### 方法一:基于 `Date` 对象的简单逻辑 这种方法利用了 `Date` 构造函数的特点,即可以通过设置非法日期自动调整到合法范围的功能。 ```javascript function getMonthFirstAndLast() { const today = new Date(); // 获取当月第一天 const firstDay = new Date(today.getFullYear(), today.getMonth(), 1); // 获取当月最后一天 const lastDay = new Date(today.getFullYear(), today.getMonth() + 1, 0); return [ formatDate(firstDay), formatDate(lastDay) ]; } // 辅助函数用于格式化日期为 YYYY-MM-DD 的形式 function formatDate(date) { const y = date.getFullYear(); const m = String(date.getMonth() + 1).padStart(2, '0'); const d = String(date.getDate()).padStart(2, '0'); return `${y}-${m}-${d}`; } ``` 此方法的核心在于理解 `new Date(year, monthIndex, day)` 中参数的作用。通过将 `day` 设置为 `1` 可获得当月的第一天;而将 `monthIndex` 加 1 并将 `day` 设为 `0` 则会返回上一个月的最后一日,也就是目标月份最后一天[^1]。 调用示例: ```javascript console.log(getMonthFirstAndLast()); // 输出类似于 ["2023-02-01", "2023-02-28"] ``` --- #### 方法二:综合考虑闰年等因素的手动计算法 如果希望更直观地了解每个月的具体天数,则可以采用手动判断的方式。这种方式虽然稍显冗余,但在某些场景下有助于学习基础逻辑。 ```javascript function getMonthRangeManually(yearMonth) { const year = parseInt(yearMonth.slice(0, 4)); const month = parseInt(yearMonth.slice(4, 6)); // 计算第一天 const firstDayFormatted = `${year}年${String(month).padStart(2, '0')}月01日`; // 计算最后一天 let lastDay; if ([4, 6, 9, 11].includes(month)) { lastDay = 30; } else if (month === 2) { const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; lastDay = isLeapYear ? 29 : 28; } else { lastDay = 31; } const lastDayFormatted = `${year}年${String(month).padStart(2, '0')}月${String(lastDay).padStart(2, '0')}日`; return [firstDayFormatted, lastDayFormatted]; } ``` 这种写法适合初学者深入理解日期规则,但对于实际开发来说可能不够简洁高效[^2]。 --- #### 综合推荐方案 对于现代前端项目而言,通常建议优先选用内置 API 或第三方库(如 moment.js 或 day.js)。但如果仅需简单的功能扩展,可以直接使用如下封装好的工具函数: ```javascript function getCurMonthFirstOrLast(type = 2) { const curT = new Date(); const y = curT.getFullYear(); // 获取年份 const m = curT.getMonth() + 1; // 获取月份 const daysInMonth = new Date(y, m, 0).getDate(); const formattedM = String(m).padStart(2, '0'); // 补零操作 switch (type) { case 0: // 第一天 return `${y}/${formattedM}/01`; case 1: // 最后一天 return `${y}/${formattedM}/${daysInMonth}`; default: // 当前日期 const d = curT.getDate(); return `${y}/${formattedM}/${String(d).padStart(2, '0')}`; } } ``` 以上代码片段能够灵活应对不同需求情境下的日期提取任务[^3]。 --- ### 总结 无论是借助原生 `Date` 对象还是引入外部依赖,都可以轻松完成对指定时间段边界值的捕获工作。具体选择取决于个人偏好以及项目的复杂程度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值