📄 weeklycalendar.js
字号:
//************************************************************************************
// weeklycalendar
// Copyright (C) 2006, Massimo Beatini
//
// This software is provided "as-is", without any express or implied warranty. In
// no event will the authors be held liable for any damages arising from the use
// of this software.
//
// Permission is granted to anyone to use this software for any purpose, including
// commercial applications, and to alter it and redistribute it freely, subject to
// the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not claim
// that you wrote the original software. If you use this software in a product,
// an acknowledgment in the product documentation would be appreciated but is
// not required.
//
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
//************************************************************************************
// variable declarations
var w_d = new Date()
var w_monthname=new Array("January","February","March","April","May","June","July","August","September","Octber","November","December");
var w_dayname = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var w_StartOfWeek = 1; // Monday
// image title
var prev_month_title = "Previous month";
var next_month_title = "Next month";
var close_title = "Close";
// set the default position
// for the week end days (Staurday,Sunday)
var weekend_pos = new Array(6,0);
var w_min_year = 1960;
var w_max_year = 2060;
var gx = 0;
var gy = 0;
var w_linkedInputText_1;
var w_linkedInputText_2;
var HideWeekCol = false;
//
//
//
function w_funMouseMove(evnt)
{
gx = evnt.pageX;
gy = evnt.pageY;
return true;
}
//
// handle mousemove
//
if ((navigator.appName.indexOf("Netscape") != -1) || (navigator.appName.indexOf("Opera") != -1))
{
if (document.onmousemove == undefined)
document.onmousemove = w_funMouseMove;
}
//
//
//
function w_changeMonth(id)
{
var box = document.getElementById(id);
var mm = box.options[box.selectedIndex].value;
w_d.setMonth(mm);
w_renderCalendar(0);
}
//
//
//
function w_changeYear(id)
{
var box = document.getElementById(id);
var yy = box.options[box.selectedIndex].value;
w_d.setFullYear(yy);
w_renderCalendar(0);
}
//
//
//
function w_getWeek(year,month,day){
//Find JulianDay
month += 1; //use 1-12
var a = Math.floor((14-(month))/12);
var y = year+4800-a;
var m = (month)+(12*a)-3;
var jd = day + Math.floor(((153*m)+2)/5) +
(365*y) + Math.floor(y/4) - Math.floor(y/100) +
Math.floor(y/400) - 32045; // (gregorian calendar)
/*
var jd = (day+1)+Math.round(((153*m)+2)/5)+(365+y) +
Math.round(y/4)-32083; // (julian calendar)
*/
//now calc weeknumber according to JD
var d4 = (jd+31741-(jd%7))%146097%36524%1461;
var L = Math.floor(d4/1460);
var d1 = ((d4-L)%365)+L;
NumberOfWeek = Math.floor(d1/7) + 1;
return NumberOfWeek;
}
//
//
//
function w_writeDayNumber(d)
{
var dd = new Date(d);
var temp = new Date(d);
// reset data array
for (i=0;i<6;i++)
{
for (j=0;j<7;j++)
{
document.getElementById("w_c" +i+""+j).innerHTML= "";
document.getElementById("w_c" +i+""+j).className = "day_out";
}
document.getElementById("week_" +i).innerHTML = '';
}
// set to the first day of the month
dd.setDate(1);
// fill data array
i = 0;
j = 0;
// previous month's days
j = dd.getDay() - w_StartOfWeek;
if (j<0)
j = 7 + j;
if (j > 0)
{
temp.setDate(dd.getDate()-1);
for (k=j-1; k>=0; k--)
{
document.getElementById("w_c" +i+""+k).innerHTML= temp.getDate();
if ((weekend_pos[0] == k) || (weekend_pos[1] == k))
document.getElementById("w_c" +i+""+k).className = "weekends_out";
else
document.getElementById("w_c" +i+""+k).className = "day_out";
temp.setDate(temp.getDate()-1);
}
}
var week = -1;
var iStartWeek = -1;
var iEndWeek = -1;
var weekEl;
var dayval;
do
{
// get the position according to
// StartOfWeek
j = dd.getDay() - w_StartOfWeek;
if (j<0)
j = 7 + j;
if (iStartWeek==-1)
iStartWeek = j;
iEndWeek = j;
dayval = dd.getDate();
// get the week number
if (week < 0)
week = w_getWeek(w_d.getFullYear(), w_d.getMonth(), dayval);
document.getElementById("w_c" +i+""+j).innerHTML= dayval;
// set week ends layout
if ((weekend_pos[0] == j) || (weekend_pos[1] == j))
document.getElementById("w_c" +i+""+j).className = "weekends";
else
document.getElementById("w_c" +i+""+j).className = "day";
{
// set today layout
var today = new Date();
if ((today.getDate() == dayval) && (today.getMonth() == w_d.getMonth()) && (today.getFullYear() == w_d.getFullYear()) )
document.getElementById("w_c" +i+""+j).className = "today";
}
////////
// dinamically set the onclick event
// only on the day of the selected month
////////
var object = document.getElementById("w_c" +i+""+j);
object.rownumber = i;
object.colnumber = j;
if(window.addEventListener){ // Mozilla, Netscape, Firefox
object.addEventListener('click', w_setDate, false);
} else { // IE
object.attachEvent('onclick', w_setDate);
}
///////
if (week < 0)
document.getElementById("week_" +i).innerHTML = '';
else if (w_StartOfWeek != 1)
document.getElementById("week_" +i).innerHTML = "<";
else
document.getElementById("week_" +i).innerHTML = week;
weekEl = document.getElementById("week_" +i);
// if HideWeekCol change the class
// hide the week col and its header
if (HideWeekCol)
{
weekEl.className = "weekhidden";
document.getElementById("weekHeader").className = "weekhidden";
}
else
{
document.getElementById("weekHeader").className = "week";
weekEl.className = "weeksel";
}
if (j == 6)
{
////////
// dinamically set the onclick event
// on the week number
////////
weekEl.startweek = iStartWeek;
weekEl.endweek = iEndWeek;
weekEl.rowweek = i;
if(window.addEventListener){ // Mozilla, Netscape, Firefox
weekEl.addEventListener('click', w_SetWeekDate, false);
} else { // IE
weekEl.attachEvent('onclick', w_SetWeekDate);
}
///////
week = -1;
iStartWeek = -1;
iEndWeek = -1;
i++;
}
dd.setDate(dd.getDate() + 1);
} while (dd.getDate() != 1);
if ((iStartWeek!=-1) && (iEndWeek!=-1))
{
weekEl = document.getElementById("week_" +i);
////////
// dinamically set the onclick event
// on the week number
////////
weekEl.startweek = iStartWeek;
weekEl.endweek = iEndWeek;
weekEl.rowweek = i;
if(window.addEventListener){ // Mozilla, Netscape, Firefox
weekEl.addEventListener('click', w_SetWeekDate, false);
} else { // IE
weekEl.attachEvent('onclick', w_SetWeekDate);
}
///////
}
// next month's days
if ((j < 7))
{
temp = dd;
for (k=j+1; k<7; k++)
{
document.getElementById("w_c" +i+""+k).innerHTML= temp.getDate();
if ((weekend_pos[0] == k) || (weekend_pos[1] == k))
document.getElementById("w_c" +i+""+k).className = "weekends_out";
else
document.getElementById("w_c" +i+""+k).className = "day_out";
temp.setDate(temp.getDate()+1);
}
}
}
//
// render calendar accordint to the selected
// month (k)
//
function w_renderCalendar(k)
{
var monthsel_html='';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -