JavaScript 获取月份天数与周数的实现技巧

作者:纸飞机

时间:2026-10-29

浏览:573

本文介绍利用JavaScript Date对象的特性,通过构造特定日期字符串(如传入0号)来自动获取月份最大天数及处理闰年逻辑。同时提供计算某年某月天数及判断某日属于第几周的具体函数实现,帮助开发者简化日期处理逻辑。

文章目录

JavaScript 获取月份天数与周数的实现技巧

本文介绍利用JavaScript Date对象的特性,通过构造特定日期字符串(如传入0号)来自动获取月份最大天数及处理闰年逻辑。同时提供计算某年某月天数及判断某日属于第几周的具体函数实现,帮助开发者简化日期处理逻辑。


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>标题页</title>
<script language="javascript">
function getLastDay(year,month)
{
 var new_year = year;  //取当前的年份
 var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
 if(month>12)      //如果当前大于12月,则年份转到下一年
 {
 new_month -=12;    //月份减
 new_year++;      //年份增
 }
 var newnew_date = new Date(new_year,new_month,1);//取当年当月中的第一天
 return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期
}
</script>
<body>
  <input id="Button1" type="button" value="取2007年5月的最后一天" onClick="alert(getLastDay(2007,5))" />
</body>
</html>

利用 Date 对象特性获取月份最大天数

js得到一个月最大天数 JS里 面的new Date("xxxx/xx/xx")这个日期的构造方法有一个妙处, 当你传入的是"xxxx/xx/0"(0号)的话,得到的日期是"xx"月的前一个 月的最后一天("xx"月的最大取值是69,题外话), 当你传入的是"xxxx/xx/1"(1号)的话,得到的日期是"xx"月的后一个 月的第一天(自己理解) 如果传入"1999/13/0",会得到"1998/12/31"。而且最大的好处是当你传入"xxxx/3/0",会得到xxxx年2月的最后一天,它会自动判断当年是否是闰年来返回28或29,不用自己判断, 所以,我们想得到选择年选择月有多少天的话,只需要


var temp=new Date("选择年/选择月+1/0");
return temp.getDate()//最大天数

该方法同样可用于日期的合法性校验。

获取指定年月天数的函数实现

以下是使用JavaScript编写的获取指定年份和月份天数的getDaysInMonth(year, month)函数示例:


function getDaysInMonth(year,month){
   month = parseInt(month,10)+1;
   var temp = new Date(year+"/"+month+"/0");
   return temp.getDate();
}

计算某日所在周数的方法

JavaScript中获取某年某日所在周数的方法


/**
 * 判断年份是否为润年
 *
 * @param {Number} year
 */
function isLeapYear(year) {
  return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}
/**
 * 获取某一年份的某一月份的天数
 *
 * @param {Number} year
 * @param {Number} month
 */
function getMonthDays(year, month) {
  return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28);
}
 /**
 * 获取某年的某天是第几周
 * @param {Number} y
 * @param {Number} m
 * @param {Number} d
 * @returns {Number}
 */
function getWeekNumber(y, m, d) {
  var now = new Date(y, m - 1, d),
    year = now.getFullYear(),
    month = now.getMonth(),
    days = now.getDate();
  //那一天是那一年中的第多少天
  for (var i = 0; i < month; i++) {
    days += getMonthDays(year, i);
  }
  //那一年第一天是星期几
  var yearFirstDay = new Date(year, 0, 1).getDay() || 7;
  var week = null;
  if (yearFirstDay == 1) {
    week = Math.ceil(days / yearFirstDay);
  } else {
    days -= (7 - yearFirstDay + 1);
    week = Math.ceil(days / 7) + 1;
  }
  return week;
}

希望上述内容对JavaScript编程有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章