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 相关文章推荐
利用javascript实现一些常用软件的下载导航
Aug 03 Javascript
IE和Firefox下event事件杂谈
Dec 18 Javascript
css样式标签和js语法属性区别
Nov 06 Javascript
js的alert样式如何更改如背景颜色
Jan 22 Javascript
jQuery实现长按按钮触发事件的方法
Feb 02 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
Mar 30 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
Apr 26 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
JavaScript实现身份证验证代码实例
Aug 26 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
php使用反射插入对象示例分享
2014/03/11 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
js资料prototype 属性
2007/03/13 Javascript
优化javascript的执行速度
2010/01/23 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
Python存取XML的常见方法实例分析
2017/03/21 Python
Python文件的读写和异常代码示例
2017/10/31 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
int在python中的含义以及用法
2019/06/27 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
python实现在线翻译功能
2020/03/03 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
python help函数实例用法
2020/12/06 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
"序列点" 是什么
2016/07/29 面试题
函授毕业生自我鉴定
2013/11/06 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
导师推荐信范文
2014/05/09 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书