<!DOCTYPE html>
<html>

<head>
<meta name="description" content="[weeks of month with Javascript, Moment and Moment Range description]">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>weeks of month with Javascript, Moment and Moment Range description</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- <link rel="stylesheet" type="text/css" media="screen" href="main.css" /> -->

</head>

<body>

</body>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/moment@2.22.2/moment.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.1/moment-range.js"></script>
    <script>
        var indexOf = [].indexOf || function (item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };



    </script>
    <script type="text/javascript">
        window['moment-range'].extendMoment(moment);
    
        var dateApril = new Date("2018-04-01");
    
        // year and month are variables
        year = 2018
        month = 5 // August (0 indexed)
        startDate = moment([year, month])
        
        document.write("<br/>inputDate : "+dateApril+"<br/>")
        console.log("inputDate : ", startDate.format("dddd, MMMM Do YYYY, h:mm:ss a"));
    
        // // Get the first and last day of the month
        firstDay = moment(startDate).startOf('month')
        endDay = moment(startDate).endOf('month')
    
        //console.log("firstDay : ", firstDay.format("dddd, MMMM Do YYYY, h:mm:ss a"));
        //console.log("endDay : ", endDay.format("dddd, MMMM Do YYYY, h:mm:ss a"));
        // // Create a range for the month we can iterate through
        monthRange = moment.range(firstDay, endDay);
        //console.log("monthRange : ", monthRange);
        // // Get all the weeks during the current month
        weeks = []
        for (let mday of monthRange.by('days')) {
            // console.log("mday", mday.week());
            if (weeks.indexOf(mday.week()) === -1) {
                weeks.push(mday.week());
            }
        }
    
        //console.log("weeks : ", weeks);
    
        // // Create a range for each week
        calendar = []
        for (let index = 0; index < weeks.length; index++) {
            var weeknumber = weeks[index];
    
    
            firstWeekDay = moment(firstDay).week(weeknumber).day(0);
            if (firstWeekDay.isBefore(firstDay)) {
                firstWeekDay = firstDay;
            }
    
            lastWeekDay = moment(endDay).week(weeknumber).day(6);
            if (lastWeekDay.isAfter(endDay)) {
                lastWeekDay = endDay;
            }
    
            //console.log("\n week number: " + index, firstWeekDay.format("DD-MM-YYYY"), lastWeekDay.format("DD-MM-YYYY"));
            document.write("<br>week number: " + index + " day: "+ firstWeekDay.format("DD-MM-YYYY")+" to "+ lastWeekDay.format("DD-MM-YYYY"))
            weekRange = moment.range(firstWeekDay, lastWeekDay)
            calendar.push(weekRange)
        }
    
        //document.write(JSON.stringify(calendar));
    </script>
</html>

{
  "plnkr": {
    "runtime": "system"
  }
}
/* Add your styles here */

// Add your code here