JavaScript 如果是星期日,日历不显示月初
JavaScript calendar dont show the first of month if is sunday
我正在使用以下 Javascript 日历。问题是,如果该月的第一天是星期日,它就不会出现。见八月。
脚本已被朋友改编,允许每周从星期一开始。感谢您的帮助,非常感谢!
function getDays(passedInDate, date, i, local) {
var month = {
name: date.toLocaleString(local, { month: 'long'}),
year: date.getFullYear(),
weeks: []
};
var newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth();
var counter = 0;
while (date.getMonth() === newDate) {
var week = getNumberOfWeeks(newDateInstance(date));
//if(week == 5)
// break;
if (typeof month.weeks[week] === 'undefined') {
month.weeks[week] = {};
}
var day = newDateInstance(date);
day.setTime(day.getTime() + (24 * 3600 * 1000));
//console.log(day);
if(week == 0 && counter == 0 && day.getDay() >= 2){
var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
month.weeks[week][tempDay.getDay()-1] = {
date: tempDay
};
}
else if(week == 0 && counter == 0 && day.getDay() == 0){
console.log(day.getDay());
var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
month.weeks[week][5] = {
date: tempDay
};
}
if(week == 4 && day.getDate() == 1 || week == 5 && day.getDate() == 1){
break;
}
if(day.getDay() == 0){
month.weeks[week][6] = {
date: day
};
}else{
month.weeks[week][day.getDay()-1] = {
date: day
};
}
date.setDate(date.getDate() +1);
counter++;
}
return month;
}
该函数比需要的复杂得多:
function getNumberOfWeeks(date) {
let w = date.getDay() - 1;
if (w < 0)
w = 6;
return Math.ceil((date.getDate() - 1 - w) / 7);
}
function getDays(passedInDate, date, i, local) {
const newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth(),
month = {
name: date.toLocaleString(local, { month: 'long'}),
year: date.getFullYear(),
weeks: []
};
while (date.getMonth() === newDate) {
const _date = newDateInstance(date),
week = getNumberOfWeeks(_date),
day = _date.getDay();
if (month.weeks[week] === undefined) {
month.weeks[week] = {};
}
month.weeks[week][day ? day - 1 : 6] = {
date: _date
};
date.setDate(date.getDate() +1);
}
return month;
}
此外,month.weeks[week][day]
包含不必要的 {date: Date}
对象,它可以简单地包含 Date
本身(有 2 个需要通过删除 .date
)
旁注:
请避免对相同函数进行不必要的调用,调用一次并将结果存储在变量中,而不是使用变量。数一数 day.getDay()
被执行了多少次...哎哟!
我正在使用以下 Javascript 日历。问题是,如果该月的第一天是星期日,它就不会出现。见八月。
脚本已被朋友改编,允许每周从星期一开始。感谢您的帮助,非常感谢!
function getDays(passedInDate, date, i, local) {
var month = {
name: date.toLocaleString(local, { month: 'long'}),
year: date.getFullYear(),
weeks: []
};
var newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth();
var counter = 0;
while (date.getMonth() === newDate) {
var week = getNumberOfWeeks(newDateInstance(date));
//if(week == 5)
// break;
if (typeof month.weeks[week] === 'undefined') {
month.weeks[week] = {};
}
var day = newDateInstance(date);
day.setTime(day.getTime() + (24 * 3600 * 1000));
//console.log(day);
if(week == 0 && counter == 0 && day.getDay() >= 2){
var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
month.weeks[week][tempDay.getDay()-1] = {
date: tempDay
};
}
else if(week == 0 && counter == 0 && day.getDay() == 0){
console.log(day.getDay());
var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
month.weeks[week][5] = {
date: tempDay
};
}
if(week == 4 && day.getDate() == 1 || week == 5 && day.getDate() == 1){
break;
}
if(day.getDay() == 0){
month.weeks[week][6] = {
date: day
};
}else{
month.weeks[week][day.getDay()-1] = {
date: day
};
}
date.setDate(date.getDate() +1);
counter++;
}
return month;
}
该函数比需要的复杂得多:
function getNumberOfWeeks(date) {
let w = date.getDay() - 1;
if (w < 0)
w = 6;
return Math.ceil((date.getDate() - 1 - w) / 7);
}
function getDays(passedInDate, date, i, local) {
const newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth(),
month = {
name: date.toLocaleString(local, { month: 'long'}),
year: date.getFullYear(),
weeks: []
};
while (date.getMonth() === newDate) {
const _date = newDateInstance(date),
week = getNumberOfWeeks(_date),
day = _date.getDay();
if (month.weeks[week] === undefined) {
month.weeks[week] = {};
}
month.weeks[week][day ? day - 1 : 6] = {
date: _date
};
date.setDate(date.getDate() +1);
}
return month;
}
此外,month.weeks[week][day]
包含不必要的 {date: Date}
对象,它可以简单地包含 Date
本身(有 2 个需要通过删除 .date
)
旁注:
请避免对相同函数进行不必要的调用,调用一次并将结果存储在变量中,而不是使用变量。数一数 day.getDay()
被执行了多少次...哎哟!