并非每个月都从星期一开始

Not every month starts with monday

本文关键字:一开始      更新时间:2023-09-26

我正在制作这个简单的日历:http://jsfiddle.net/ro0wnpus/但并非每个月都以星期一为第一个日期开始。我的问题是如何找出每月的第一个日期是什么?

这是绘制一个月中的天数的函数:

function drawDays() {
    var position = document.getElementById("daysContainer");
    var element = "<div id='cell'>";
    var numDays = getNumberOfDays(month);
    for (var i = 0; i < numDays; i++) {
        position.innerHTML += (element + (i+1) + "</div>");
    }
}
var dt = new Date(); // create a date, default = today
dt.setDate(1);      // change date so it's the 1st of the month
alert(dt.getDay()); // get day-of-week, 0 = sunday ->  6 = saturday.

试试这样的事情...

var year = "2014";
var month = "12";
var day = new Date(year + "-" + month + "-01").getDay()

由于您从 1 开始计数,而星期一是一周的第一天,因此您还必须这样做:

day = (day===0) ? 7 : day

编辑了你的 JSFiddle: http://jsfiddle.net/ro0wnpus/

以下是我更改的内容。

使用 getDay() 查找一周中的哪一天是第一天,并添加了一个新的 var 计数,该计数将跟踪循环中的日期。 getDay() 给了我们一个介于 0 和 6 之间的整数,对应于星期日到星期一。

var firstDay = new Date(year, month, 1).getDay();
var count = 1;

将第一天添加到该月的总天数中,因为我们现在需要循环访问更多日期

var numDays = getNumberOfDays(month)+firstDay;

更改了您的循环以检查我们何时到达第一天,如果我们还没有到达,请将该位置留空

for (var i = 1; i < numDays; i++) {
    if(i >= firstDay){
        position.innerHTML += (element + (count) + "</div>");
        count++;
    }else{
        position.innerHTML += (element + "" + "</div>");
    }
}