js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法
本文基于react-native
本人在用react-native写一个关于课程表的APP时需要课程表按照日期周期显示,网上查了许多方法,都没有达到自己想要的效果,根据一些方法的参考,再根据自己思维写出自己想要的效果如下图所示

获取每月有几周(注:从第一个周一开始算该月第一周)
    getWeeks(year, month) {
        var d = new Date();
        // 该月第一天
        d.setFullYear(year, month-1, 1);
        var w1 = d.getDay();
        if (w1 == 0) w1 = 7;
        // 该月天数
        d.setFullYear(year, month, 0);
        var dd = d.getDate();
        // 第一个周一
        let d1;
        if (w1 != 1) d1 = 7 - w1 + 2;
        else d1 = 1;
        let week_count = Math.ceil((dd-d1+1)/7);
        return week_count;
    }
根据年月周获取该周从周一到周日的日期
    getWeekTime(year, month,weekday) {
        var d = new Date();
        // 该月第一天
        d.setFullYear(year, month-1, 1);
        var w1 = d.getDay();
        if (w1 == 0) w1 = 7;
        // 该月天数
        d.setFullYear(year, month, 0);
        var dd = d.getDate();
        // 第一个周一
        let d1;
        if (w1 != 1) d1 = 7 - w1 + 2;
        else d1 = 1;
        var monday = d1+(weekday-1)*7;
        var sunday = monday + 6;
        var from = year+"-"+month+"-"+monday;
        var to;
        if (sunday <= dd) {
            to = year+"-"+month+"-"+sunday;
        } else {
            d.setFullYear(year, month-1, sunday);
            let days=d.getDate();
            to = d.getFullYear()+"-"+(d.getMonth()+1)+"-"+days;
        }
        console.log(weekday+" 从" + from + " 到 " + to + "");
    }
获取每月第几周的周一的日期
    getMondayTime(year, month,weekday) {
        var d = new Date();
        // 该月第一天
        d.setFullYear(year, month-1, 1);
        var w1 = d.getDay();
        if (w1 == 0) w1 = 7;
        // 该月天数
        d.setFullYear(year, month, 0);
        var dd = d.getDate();
        // 第一个周一
        let d1;
        if (w1 != 1) d1 = 7 - w1 + 2;
        else d1 = 1;
        var monday = d1+(weekday-1)*7;
        return monday;
    }
获取周一的日期
    getMonDate() {
        var d=new Date(),
            day=d.getDay(),
            date=d.getDate();
        if(day==1)
            return d;
        if(day==0)
            d.setDate(date-6);
        else
            d.setDate(date-day+1);
        return d;
    }
获得周期名字
    getDayName(day) {
        var day=parseInt(day);
        if(isNaN(day) || day<0 || day>6)
            return false;
        var weekday=["周日","周一","周二","周三","周四","周五","周六"];
        return weekday[day];
    }
获得当前日期在当月第几周
    //不包括跟上个月重合的部分
    getMonthWeek(a, b, c) {
        var date = new Date(a, parseInt(b) - 1, c), w = date.getDay(), d = date.getDate();
        return Math.ceil(
            (d + 6 - w) / 7
        );
    }
获取当月最后一天日期
    getLastDay(year,month) {
        var new_year = year;    //取当前的年份
        var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
        if(month>12) {
            new_month -=12;        //月份减
            new_year++;            //年份增
        }
        var new_date = new Date(new_year,new_month,1);                //取当年当月中的第一天
        return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期
    }
根据当前日期获取该天所在周,若该月1号不是周一,获取该月第一周的周一日期,小于该日期的归为上个月最后一周
    //当前日期几月第几周
    showDate(){
        var that=this;
        var d=this.getMonDate();
        var ds=new Date();
        var arr=[];
        for(var i=0; i<7; i++) {
            let weekDay=this.getDayName(d.getDay());
            let date=d.getDate()+'日';
            if(weekDay=='周一'){
                let beginTime=ds.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                that.state.beginTime = beginTime;
            }
            if(weekDay=='周日'){
                let endTime=ds.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                that.state.endTime = endTime;
            }
            arr.push({weekDay:weekDay,date:date});
            d.setDate(d.getDate()+1);
        }
        let month=ds.getMonth()+1;
        let weeks=this.getMonthWeek(ds.getFullYear(),month,ds.getDate())-1;
        //每月周一日期
        let oneDate=that.getMondayTime(ds.getFullYear(),month,1);
        if(ds.getDate()<oneDate){
            month=ds.getMonth();
            weeks=this.getWeeks(ds.getFullYear(),month);
        }
        console.log('month:',month,'weeks:',weeks);
        this.setState({
            list:arr,
            yearDate:ds.getFullYear(),
            monthDate:month,
            month:ds.getMonth()+1,
            monthWeek:'第'+weeks+'周',
            theMonthWeek:'第'+weeks+'周'
        });
    }
js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法的更多相关文章
- C#获取周一、周日的日期 函数类
		#region 得到一周的周一和周日的日期 /// <summary> /// 计算本周的周一日期 /// </summary> ... 
- mysql获取当前日期的周一和周日的日期
		,,date_format(curdate(),)//获取当前日期 在本周的周一 的日期 ,,date_format(curdate(),)//获取当前日期 在本周的周日 的日期 
- JAVA获取当前日期时间所在周的周一和周日日期
		/** * 获取当前时间所在周的周一和周日的日期时间 * @return */ public static Map<String,String> getWeekDate() { Map&l ... 
- JS 获取每月有几周(每周五到周四算作一周)
		原文地址:https://caochangkui.github.io/data-week/ 将每周五至周四算作一周,计算每月有几周,并获取到每周的起始时间. 日期格式化 Date.prototype. ... 
- js实现获取当前时间是本月第几周和年的第几周的方法
		js实现获取当前时间是本月第几周和年的第几周的方法 获取本月第几周的方法: var getMonthWeek = function (a, b, c) { /** * a = d = 当前日期 * b ... 
- js获取选中日期的当周的周一和周日
		js获取选中日期的当周的周一和周日 第一种方法(推荐): function getWeekStr(str) { // 将字符串转为标准时间格式 str2 = Date.parse(str); let ... 
- PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
		本文实例讲述了PHP获取日期对应星期.一周日期.星期开始与结束日期的方法.分享给大家供大家参考,具体如下: /* * 获取日期对应的星期 * 参数$date为输入的日期数据,格式如:2018-6-22 ... 
- js中style,currentStyle和getComputedStyle的区别以及获取css操作方法
		在js中,之前我们获取属性大多用的都是ele.style.border这种形式的方法,但是这种方法是有局限性的,该方法只能获取到行内样式,获取不了外部的样式.所以呢下面我就教大家获取外部样式的方法,因 ... 
- js获取table checkbox选中行的值.mdjs获取table checkbox选中行的
		<!DOCTYPE html> <html> <head> <script src="https://cdn.staticfile.org/jque ... 
随机推荐
- Java8之旅(六) -- 使用lambda实现尾递归
			前言 本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用.众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类 ... 
- LeetCode 191. Number of 1 bits (位1的数量)
			Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ... 
- 写出易于调试的SQL
			1.前言 相比高级语言的调试如C# , 调试SQL是件痛苦的事 . 特别是那些上千行的存储过程, 更是我等码农的噩梦. 在将上千行存储过程的SQL 分解到 C# 管理后, 也存在调试的不通畅, 如何让 ... 
- c++ 类覆盖方法中的协变返回类型
			c++ 类覆盖方法中的协变返回类型 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型.这样的类型称为协变返回类型(Covarian ... 
- Strange fuction
			Problem Description Now, here is a fuction: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=1 ... 
- IdentityServer4 指定角色授权(Authorize(Roles="admin"))
			1. 业务场景 IdentityServer4 授权配置Client中的AllowedScopes,设置的是具体的 API 站点名字,也就是使用方设置的ApiName,示例代码: //授权中心配置 n ... 
- AngularJS学习篇(四)
			AngularJS ng-model 指令 ng-model 指令用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值. <!DOCTYPE html& ... 
- IE下 GIF不动失效的奇葩问题
			IE下(IE6~IE9都有该问题),对页面进行了某些操作之后,页面上的GIF动画就停留在某一帧不动了~~~ !! 我大IE 就是这么奇葩. 搜索了一下,搞了好久总算搞定. 下面说下目前了解的所有的可能 ... 
- Java的DAO设计模式
			用java的DAO模式实现对一个学生实体的增加,查询操作. 1.建立一个学生实体类 Student.java public class Student { private String sid; pr ... 
- OpenCASCADE BRepMesh - 2D Delaunay Triangulation
			OpenCASCADE BRepMesh - 2D Delaunay Triangulation eryar@163.com Abstract. OpenCASCADE package BRepMes ... 
