js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期


Posted in Javascript onFebruary 01, 2020

js 获取 本周、上周、本月、上月、本季度、上季度的开始结束日期

/**
 * 获取本周、本季度、本月、上月的开始日期、结束日期
 */
var now = new Date(); //当前日期
var nowDayOfWeek = now.getDay(); //今天本周的第几天
var nowDay = now.getDate(); //当前日
var nowMonth = now.getMonth(); //当前月
var nowYear = now.getYear(); //当前年
nowYear += (nowYear < 2000) ? 1900 : 0; //
var lastMonthDate = new Date(); //上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth() - 1);
var lastYear = lastMonthDate.getYear();
var lastMonth = lastMonthDate.getMonth();
//格式化日期:yyyy-MM-dd
function formatDate(date) {
  var myyear = date.getFullYear();
  var mymonth = date.getMonth() + 1;
  var myweekday = date.getDate();
  if (mymonth < 10) {
    mymonth = "0" + mymonth;
  }
  if (myweekday < 10) {
    myweekday = "0" + myweekday;
  }
  return (myyear + "-" + mymonth + "-" + myweekday);
}
//获得某月的天数
function getMonthDays(myMonth) {
  var monthStartDate = new Date(nowYear, myMonth, 1);
  var monthEndDate = new Date(nowYear, myMonth + 1, 1);
  var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
  return days;
}
//获得本季度的开始月份
function getQuarterStartMonth() {
  var quarterStartMonth = 0;
  if (nowMonth < 3) {
    quarterStartMonth = 0;
  }
  if (2 < nowMonth && nowMonth < 6) {
    quarterStartMonth = 3;
  }
  if (5 < nowMonth && nowMonth < 9) {
    quarterStartMonth = 6;
  }
  if (nowMonth > 8) {
    quarterStartMonth = 9;
  }
  return quarterStartMonth;
}
//获得本周的开始日期
function getWeekStartDate() {
  var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
  return formatDate(weekStartDate);
}
//获得本周的结束日期
function getWeekEndDate() {
  var weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
  return formatDate(weekEndDate);
}
//获得上周的开始日期
function getLastWeekStartDate() {
  var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 7);
  return formatDate(weekStartDate);
}
//获得上周的结束日期
function getLastWeekEndDate() {
  var weekEndDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 1);
  return formatDate(weekEndDate);
}
//获得本月的开始日期
function getMonthStartDate() {
  var monthStartDate = new Date(nowYear, nowMonth, 1);
  return formatDate(monthStartDate);
}
//获得本月的结束日期
function getMonthEndDate() {
  var monthEndDate = new Date(nowYear, nowMonth, getMonthDays(nowMonth));
  return formatDate(monthEndDate);
}
//获得上月开始时间
function getLastMonthStartDate() {
  var lastMonthStartDate = new Date(nowYear, lastMonth, 1);
  return formatDate(lastMonthStartDate);
}
//获得上月结束时间
function getLastMonthEndDate() {
  var lastMonthEndDate = new Date(nowYear, lastMonth, getMonthDays(lastMonth));
  return formatDate(lastMonthEndDate);
}
//获得本季度的开始日期
function getQuarterStartDate() {
  var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
  return formatDate(quarterStartDate);
}
//或的本季度的结束日期
function getQuarterEndDate() {
  var quarterEndMonth = getQuarterStartMonth() + 2;
  var quarterStartDate = new Date(nowYear, quarterEndMonth,
      getMonthDays(quarterEndMonth));
  return formatDate(quarterStartDate);
}

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

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

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

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

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; 
}

好了这篇文章就介绍到这了

Javascript 相关文章推荐
Js callBack 返回前一页的js方法
Nov 30 Javascript
javascript中的一些注意事项 更新中
Dec 06 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
Node.js Event Loop各阶段讲解
Mar 08 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
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 #jQuery
js页面加载后执行的几种方式小结
Jan 30 #Javascript
You might like
教你php如何实现验证码
2016/01/20 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
CI框架附属类用法分析
2018/12/26 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript读取xml
2006/11/04 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
关于vue里页面的缓存详解
2019/11/04 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
详解rem 适配布局
2018/10/31 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
枚举与#define宏的区别
2014/04/30 面试题
2014年预备党员学习两会心得体会
2014/03/17 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
消防验收申请报告
2015/05/15 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
新手入门Mysql--概念
2021/06/18 MySQL
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server