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 判断checkbox是否选中的实现代码
Nov 23 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
Jan 13 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 Javascript
详解angularjs实现echart图表效果最简洁教程
Nov 29 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
vue实现登录功能
Dec 31 Vue.js
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之变量、常量学习笔记
2008/03/27 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python requests库用法实例详解
2018/08/14 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
python解析yaml文件过程详解
2019/08/30 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
2013年军训通讯稿
2014/02/05 职场文书
教师工作总结范文2014
2014/11/10 职场文书
社区端午节活动总结
2015/02/11 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server