js 计算月/周的第一天和最后一天代码


Posted in Javascript onFebruary 01, 2020

因为项目开发中遇到需要向后台传本周的开始和结束时间,以及上一周的起止时间,就琢磨了半天,总算写出来一套,写篇文章是为了方便自己记忆,也是分享给需要的人,水平有限,写的不好请见谅:

1、getDateStr3函数是为了把时间对象转变为yy-mm-dd的字符串,方便传值;

2、getWeekStartAndEnd函数是获取周的起止时间,并且用getDateStr3转换成字符串放到数组中,其中参数0代表当前周,-1代表前一周,-2代表上上周,以此类推,反过来也可以1代表下一周;

3、getMonthStartAndEnd函数是获取月的起止时间,传参同上

//获取当前日期yy-mm-dd
//date 为时间对象
function getDateStr3(date) {
  var year = "";
  var month = "";
  var day = "";
  var now = date;
  year = ""+now.getFullYear();
  if((now.getMonth()+1)<10){
    month = "0"+(now.getMonth()+1);
  }else{
    month = ""+(now.getMonth()+1);
  }
  if((now.getDate())<10){
    day = "0"+(now.getDate());
  }else{
    day = ""+(now.getDate());
  }
  return year+"-"+month+"-"+day;
}
/** 
* 获得相对当前周AddWeekCount个周的起止日期 
* AddWeekCount为0代表当前周  为-1代表上一个周  为1代表下一个周以此类推
* **/ 
function getWeekStartAndEnd(AddWeekCount) { 
  //起止日期数组  
  var startStop = new Array(); 
  //一天的毫秒数  
  var millisecond = 1000 * 60 * 60 * 24; 
  //获取当前时间  
  var currentDate = new Date();
  //相对于当前日期AddWeekCount个周的日期
  currentDate = new Date(currentDate.getTime() + (millisecond * 7*AddWeekCount));
  //返回date是一周中的某一天
  var week = currentDate.getDay(); 
  //返回date是一个月中的某一天  
  var month = currentDate.getDate();
  //减去的天数  
  var minusDay = week != 0 ? week - 1 : 6; 
  //获得当前周的第一天  
  var currentWeekFirstDay = new Date(currentDate.getTime() - (millisecond * minusDay)); 
  //获得当前周的最后一天
   var currentWeekLastDay = new Date(currentWeekFirstDay.getTime() + (millisecond * 6));
  //添加至数组  
  startStop.push(getDateStr3(currentWeekFirstDay)); 
  startStop.push(getDateStr3(currentWeekLastDay)); 
  
  return startStop; 
} 
/** 
* 获得相对当月AddMonthCount个月的起止日期 
* AddMonthCount为0 代表当月 为-1代表上一个月 为1代表下一个月 以此类推
* ***/ 
function getMonthStartAndEnd(AddMonthCount) { 
  //起止日期数组  
  var startStop = new Array(); 
  //获取当前时间  
  var currentDate = new Date();
  var month=currentDate.getMonth()+AddMonthCount;
  if(month<0){
    var n = parseInt((-month)/12);
    month += n*12;
    currentDate.setFullYear(currentDate.getFullYear()-n);
  }
  currentDate = new Date(currentDate.setMonth(month));
  //获得当前月份0-11  
  var currentMonth = currentDate.getMonth(); 
  //获得当前年份4位年  
  var currentYear = currentDate.getFullYear(); 
  //获得上一个月的第一天  
  var currentMonthFirstDay = new Date(currentYear, currentMonth,1); 
  //获得上一月的最后一天  
  var currentMonthLastDay = new Date(currentYear, currentMonth+1, 0); 
  //添加至数组  
  startStop.push(getDateStr3(currentMonthFirstDay)); 
  startStop.push(getDateStr3(currentMonthLastDay)); 
  //返回  
  return startStop; 
}

获取到每月的第一天和最后一天 需要传入一个月份 如果忘记传入 取当前月份

//获取到每月的第一天和最后一天
 getMonthFirstOrLaseDay:function(month){
        var month=month || (new Date()).getMonth() //设置默认 如果不穿 取当前月份
    var nowdays = new Date(); 
    var year = nowdays.getFullYear(); 
    if(month==0) { 
      month=12; 
      year=year-1; 
    } 
    if (month < 10) { 
      month = "0" + month; 
    } 
    var firstDay = year+'' + month+'' + "01";
    var myDate = new Date(year, month, 0); 
    var lastDay = year+'' + month+'' + myDate.getDate();
    return {firstDay:firstDay,lastDay:lastDay}
  },

获取到每个月有几周,并且每周一和周日是哪天 如果不穿 默认取当年 当月

//获取到每个月有几周,并且每周一和周日是哪天
 getAForWeeks:function (year, month) {
  var year=year || (new Date()).getFullYear()
  var month=month || (new Date()).getMonth()


  var d = new Date();
  // what day is first day
  d.setFullYear(year, month-1, 1);
  var w1 = d.getDay();
  if (w1 == 0) w1 = 7;
  // total day of month
  d.setFullYear(year, month, 0);
  var dd = d.getDate();
  // first Monday
  if (w1 != 1) d1 = 7 - w1 + 2;
  else d1 = 1;
  week_count = Math.ceil((dd-d1+1)/7);
  var allWeek={};
  for (var i = 0; i < week_count; i++) {
    var monday = d1+i*7;
    var sunday = monday + 6;
    var from = year+''+this.fnToDub(month)+''+this.fnToDub(monday);
    var to;
    if (sunday <= dd) {
      to = year+''+this.fnToDub(month)+''+this.fnToDub(sunday);
    } else {
      d.setFullYear(year, month-1, sunday);
      to = d.getFullYear()+''+this.fnToDub((d.getMonth()+1))+''+this.fnToDub(d.getDate());
    }
    allWeek[(i+1)]={
     from:from,
     to:to
    }
  }
  return {allWeek:allWeek,week_count:week_count}
 },

获取当月的第一天和当月的最后一天其实还挺麻烦的,因为每个月天数可能不一样。不过借助 Date 对象则很容易实现:

构造函数

new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

各参数的含义:

value 代表自1970年1月1日00:00:00 (世界标准时间) 起经过的毫秒数。
dateString 表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别
year 代表年份的整数值。为了避免2000年问题最好指定4位数的年份; 使用 1998, 而不要用 98.
month 代表月份的整数值从0(1月)到11(12月)。
day 代表一个月中的第几天的整数值,从1开始。
hour 代表一天中的小时数的整数值 (24小时制)。
minute 分钟数。
second 秒数。
millisecond 表示时间的毫秒部分的整数值。

当月第一天和最后一天

可直接用年月日构造一个日期:

var date = new Date(), y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);

指定月份的第一天和最后一天

比如2012年1月第一天和最后一天,运算时月份要减1

var y = 2012, m = 1
var firstDay = new Date(y, m - 1, 1);
var lastDay = new Date(y, m, 0);
console.log(firstDay);
console.log(lastDay);

运行结果:

Sun Jan 01 2012 00:00:00 GMT+0800 (中国标准时间)
Tue Jan 31 2012 00:00:00 GMT+0800 (中国标准时间)

Javascript 相关文章推荐
js 匿名调用实现代码
Jun 19 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jquery采用oop模式class类的使用示例
Jan 22 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
Apr 06 Javascript
AngularJS控制器之间的通信方式详解
Nov 03 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
Mar 22 Javascript
详解easyui 切换主题皮肤
Apr 04 Javascript
JavaScript面向对象中接口实现方法详解
Jul 24 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 Javascript
js获取本日、本周、本月的时间代码
Feb 01 #Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
Feb 01 #Javascript
vue学习笔记之过滤器的基本使用方法实例分析
Feb 01 #Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 #Javascript
vue学习笔记之作用域插槽实例分析
Feb 01 #Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 #Javascript
Jquery Datatables的使用详解
Jan 30 #jQuery
You might like
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
深入理解vue Render函数
2017/07/19 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
python概率计算器实例分析
2015/03/25 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
python如何在循环引用中管理内存
2018/03/20 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
国际贸易本科毕业生求职信
2014/09/26 职场文书
教师节横幅标语
2014/10/08 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫