一個 Java 所寫成的日曆



<link href="images/style.css" rel="stylesheet" type="text/css">
<body onLoad="CreateMonthView(gcrq)">
<table width="102%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
  <tr>
    <td width="6%" height="28" bgcolor="#DDDDDD"><div align="center"><img src="images/calendar.gif" width="18" height="18"></div></td>
    <td width="14%" bgcolor="#<%if action="" then%>B3D1FF<%else%>DDDDDD<%end if%>" class="column_title_black"  onMouseOver="this.style.backgroundColor='B3D1FF'" onMouseOut="this.style.backgroundColor=''"><div align="center"><a href="?" class="head_black">日程安排</a></div></td>
    <td width="20%" bgcolor="#<%if action="search" then%>B3D1FF<%else%>DDDDDD<%end if%>" class="column_title_black" onMouseOver="this.style.backgroundColor='B3D1FF'" onMouseOut="this.style.backgroundColor=''"><div align="center">
      <table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr style="cursor:hand">
          <td width="30%"><div align="center"><img src="images/infofind_small.gif" width="27" height="26"></div></td>
          <td width="70%"><a href="?action=search" target="mainFrame" class="head_black">日程安排查询</a> </td>
        </tr>
      </table>
    </div></td>
    <td width="60%" bgcolor="#DDDDDD" class="column_title_black">&nbsp;</td>
  </tr>
</table>
<table width="98%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>&nbsp;</td>
    <td class="column_title_while">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td width="8%"><div align="right"><img src="images/calendar.gif" width="18" height="18">&nbsp;&nbsp;&nbsp;</div></td>
    <td width="81%" class="column_title_while">日程安排</td>
    <td width="11%">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td class="column_title_while">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" valign="middle"><input name="gcrq" type="hidden" id="gcrq" value=""></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>
<Script language="javascript">

<!--

//this is jsMonthView 1.0, author is Chinese DengKang (2002-07-12).

//I allow your do any modify, but i don't bear any liability.

//browser: IE 4 and later

function DefineMonthView(theTextObject){ //the month view construct function
 this.GetOnlyName = function( ){ //create one and only name on the document
  var theName = "MV"; //prefix
  var aryName = new Array();
  aryName[0] = "_MonthView"; //the month view main body's name postfix
  aryName[1] = "_MonthGrid"; //the month view day area's name postfix
  aryName[2] = "_goPreviousMonth"; //the month view go previous month button's name postfix
  aryName[3] = "_goNextMonth"; //the month view go next month button's name postfix
  aryName[4] = "_YearList"; //the month view year list's name postfix
  aryName[5] = "_MonthList"; //the month view month list's name postfix
  aryName[6] = "_DayList"; //keep the month view current day's element name postfix
  aryName[7] = "_goNextYear";
  aryName[8] = "_goPreviousYear";
  var i = -1, j = 0, maxi = 2000;
  var exTag = true;
  while ((exTag == true) && (i < maxi)){
   i++;
   exTag = false;
   for (j=0;j<aryName.length;j++){
//    if ((j!=2)||(j!=3)){//不显示上月和下月
     if (document.all.item(theName + i.toString() + aryName[j]) != null){
      exTag = true;
     }
//    }
   }
  }
  if (exTag == false){
   return(theName + i.toString());
  }
  else{
   return("_" + theName);
  }
 }
 var theName = this.GetOnlyName();
 this.Name = theName; //the month view name
 this.Source = theTextObject; //the month view act on theTextObject
 this.MinYear = 1970; //year list min value
 //return between 1000 and 9999 and <= this.MaxYear
 this.MaxYear = 2030; //year list max value
 //return between 1000 and 9999 and >= this.MinYear
 this.Width = 200; //the month view main body's width
 this.Height = 120; //the month view main body's height
 this.DateFormat = "<yyyy>-<mm>-<dd>"; //the date format
 //<yy> or <yyyy> is year, <m> or <mm> is digital format month, <MMM> or <MMMMMM> is character format month, <d> or <dd> is day, other char unchanged
 //this function setting year, month and day sequence
 //example:
 // <yyyy>-<mm>-<dd> : 2002-04-01
 // <yy>.<m>.<d> : 02.4.1
 // <yyyy> Year <MMMMMM> Month <d> Day : 2002 Year April Month 1 Day
 // <m>/<d>/<yy> : 4/1/02
 // <MMM> <dd>, <yyyy> : Apr 01, 2002
 // <MMMMMM> <d>, <yyyy> : April 1, 2002
 // <dd> <MMM> <yyyy> : 01 Apr 2002
 // <dd>/<mm>/<yyyy> : 01/04/2002
 this.UnselectBgColor = "#FFFFFF"; //the month view default background color
 this.SelectedBgColor = "#808080"; //the selected date background color
 this.SelectedColor = "#FFFFFF"; //the selected date front color
 this.DayBdWidth = "1"; //the day unit border width, unit is px
 this.DayBdColor = this.UnselectBgColor; //the day unit border color,default is this.UnselectBgColor
 this.TodayBdColor = "#"; //denote today's date border color
 this.InvalidColor = "#808080"; //it is not current month day front color
 this.ValidColor = "#0000FF"; //it is current month day front color
 this.WeekendBgColor = this.UnselectBgColor; //the weekend background color, default is this.UnselectBgColor
 this.WeekendColor = this.ValidColor; //the weekend front color, default is this.ValidColor
 this.YearListStyle = "font-size:12px; font-family:宋体;"; //the year list's style
 this.MonthListStyle = "font-size:12px; font-family:宋体;"; //the month list's style
 this.MonthName = new Array(); //month name list, font is include this.MonthListStyle
 this.MonthName[0] = "1月";
 this.MonthName[1] = "2月";
 this.MonthName[2] = "3月";
 this.MonthName[3] = "4月";
 this.MonthName[4] = "5月";
 this.MonthName[5] = "6月";
 this.MonthName[6] = "7月";
 this.MonthName[7] = "8月";
 this.MonthName[8] = "9月";
 this.MonthName[9] = "10月";
 this.MonthName[10] = "11月";
 this.MonthName[11] = "12月";
 this.TitleStyle = "cursor:default; color:#000000; background-color:" + this.UnselectBgColor + "; font-size:16px; font-weight:bolder; font-family:Times new roman; text-align:center; vertical-align:bottom;"; //the month view title area's style
 this.WeekName = new Array(); //week name list, font is include this.TitleStyle
 this.WeekName[0] = "日";
 this.WeekName[1] = "一";
 this.WeekName[2] = "二";
 this.WeekName[3] = "三";
 this.WeekName[4] = "四";
 this.WeekName[5] = "五";
 this.WeekName[6] = "六";
 this.FooterStyle = "cursor:hand; color:#FF0000; background-color:" + this.UnselectBgColor + "; font-size:18px; font-family:Verdana; text-align:left; vertical-align:middle;"; //the month footer area's style
 this.TodayTitle = "今天:"; //today tip string, font is include this.FooterStyle
 this.MonthBtStyle = "font-family:Marlett; font-size:12px;"; //the change month button style
 this.PreviousMonthText = "3"; //the go previous month button text
 //font is include this.MonthBtStyle
 this.NextMonthText = "4"; //the go next month button text
 //font is include this.MonthBtStyle
 this.MonthGridStyle = "border-width:1px; border-style:solid; border-color:#000000;"; //the month view main body's default style
 this.HeaderStyle = "height:32px; background-color:menu;"; //the month view header area's style
 this.LineBgStyle = "height:10px; background-color:" + this.UnselectBgColor + "; text-align:center; vertical-align:middle;"; //the month view title area and day area compart area background style
 this.LineStyle = "width:90%; height:1px; background-color:#000000;"; //the month view title area and day area compart area front style
 this.DayStyle = "cursor:hand; font-size:12px; font-family:Verdana; text-align:center; vertical-align:middle;"; //the month view day area's style
 this.OverDayStyle = "this.style.textDecoration='underline';"; //the mouse over a day style
 this.OutDayStyle = "this.style.textDecoration='none';"; //the mouse out a day style
 this.GetoffsetLeft = function(theObject){ //return theObject's absolute offsetLeft
  var absLeft = 0;
  var thePosition="";
  var tmpObject = theObject;
  while (tmpObject != null){
   thePosition = tmpObject.position;
   tmpObject.position = "static";
   absLeft += tmpObject.offsetLeft;
   tmpObject.position = thePosition;
   tmpObject = tmpObject.offsetParent;
  }
  return absLeft;
 }
 this.GetoffsetTop = function(theObject){ //return theObj's absolute offsetTop
  var absTop = 0;
  var thePosition = "";
  var tmpObject = theObject;
  while (tmpObject != null){
   thePosition = tmpObject.position;
   tmpObject.position = "static";
   absTop += tmpObject.offsetTop;
   tmpObject.position = thePosition;
   tmpObject = tmpObject.offsetParent;
  }
  return absTop;
 }
 this.GetFormatYear = function(theYear){//format theYear to 4 digit
  var tmpYear = theYear;
  if (tmpYear < 100){
   tmpYear += 1900;
   if (tmpYear < 1970){
    tmpYear += 100;
   }
  }
  if (tmpYear < this.MinYear){
   tmpYear = this.MinYear;
  }
  if (tmpYear > this.MaxYear){
   tmpYear = this.MaxYear;
  }
  return(tmpYear);
 }
 this.GetMonthDays = function(theYear, theMonth){ //get theYear and theMonth days number
  var theDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  var theMonthDay = 0, tmpYear = this.GetFormatYear(theYear);
  theMonthDay = theDays[theMonth];
  if (theMonth == 1){ //theMonth is February
   if(((tmpYear % 4 == 0) && (tmpYear % 100 != 0)) || (tmpYear % 400 == 0)){
    theMonthDay++;
   }
  }
  return(theMonthDay);
 }
 this.SetDateFormat = function(theYear, theMonth, theDay){//format a date to this.DateFormat
  var theDate = this.DateFormat;
  var tmpYear = this.GetFormatYear(theYear);
  
  var tmpMonth = theMonth;
  if (tmpMonth < 0){
   tmpMonth = 0;
  }
  if (tmpMonth > 11){
   tmpMonth = 11;
  }
  var tmpDay = theDay;
  if (tmpDay < 1){
   tmpDay = 1;
  }
  else{
   tmpDay = this.GetMonthDays(tmpYear, tmpMonth);
   if (theDay < tmpDay){
    tmpDay = theDay;
   }
  }
  theDate = theDate.replace(/<yyyy>/g, tmpYear.toString());
  theDate = theDate.replace(/<yy>/g, tmpYear.toString().substr(2,2));
  theDate = theDate.replace(/<MMMMMM>/g, this.MonthName[tmpMonth]);
  theDate = theDate.replace(/<MMM>/g, this.MonthName[tmpMonth].substr(0,3));
  if (theMonth < 9){
   theDate = theDate.replace(/<mm>/g, "0" + (tmpMonth + 1).toString());
  }else{
   theDate = theDate.replace(/<mm>/g, (tmpMonth + 1).toString());
  }
  theDate = theDate.replace(/<m>/g, (tmpMonth + 1).toString());
  if (theDay < 10){
   theDate = theDate.replace(/<dd>/g, "0" + tmpDay.toString());
  }else{
   theDate = theDate.replace(/<dd>/g, tmpDay.toString());
  }
  theDate = theDate.replace(/<d>/g, tmpDay.toString());
  return(theDate);
 }
 this.GetTextDate = function(theString){ //convert a string to a date, if the string is not a date, return a empty string
  var i = 0, tmpChar = "", find_tag = "";
  var start_at = 0, end_at = 0, year_at = 0, month_at = 0, day_at = 0;
  var tmp_at = 0, one_at = 0, two_at = 0, one_days = 0, two_days = 0;
  var aryDate = new Array();
  var tmpYear = -1, tmpMonth = -1, tmpDay = -1;
  var tmpDate = theString.toLowerCase();
  var defDate = "";
  end_at = tmpDate.length;
  for (i=1;i<end_at;i++){
   if (tmpDate.charAt(i)=="0"){
    tmpChar = tmpDate.charAt(i-1);
    if (tmpChar<"0" || tmpChar>"9"){
     tmpDate = tmpDate.substr(0,i-1) + "-" + tmpDate.substr(i+1);
    }
   }
  }
  for (i=0;i<9;i++){
   tmpDate = tmpDate.replace(this.MonthName[i].toLowerCase().substr(0,3), "-00" + (i+1).toString() + "-");
  }
  for (i=9;i<12;i++){
   tmpDate = tmpDate.replace(this.MonthName[i].toLowerCase().substr(0,3), "-0" + (i+1).toString() + "-");
  }
  tmpDate = tmpDate.replace(/jan/g, "-001-");
  tmpDate = tmpDate.replace(/feb/g, "-002-");
  tmpDate = tmpDate.replace(/mar/g, "-003-");
  tmpDate = tmpDate.replace(/apr/g, "-004-");
  tmpDate = tmpDate.replace(/may/g, "-005-");
  tmpDate = tmpDate.replace(/jun/g, "-006-");
  tmpDate = tmpDate.replace(/jul/g, "-007-");
  tmpDate = tmpDate.replace(/aug/g, "-008-");
  tmpDate = tmpDate.replace(/sep/g, "-009-");
  tmpDate = tmpDate.replace(/oct/g, "-010-");
  tmpDate = tmpDate.replace(/nov/g, "-011-");
  tmpDate = tmpDate.replace(/dec/g, "-012-");
  for (i=0;i<tmpDate.length;i++){
   tmpChar = tmpDate.charAt(i);
   if ((tmpChar<"0" || tmpChar>"9") && (tmpChar != "-")){
    tmpDate = tmpDate.replace(tmpChar,"-")
   }
  }
  while(tmpDate.indexOf("--") != -1){
   tmpDate = tmpDate.replace(/--/g,"-");
  }
  start_at = 0;
  end_at = tmpDate.length-1;
  while (tmpDate.charAt(start_at)=="-"){
   start_at++;
  }
  while (tmpDate.charAt(end_at)=="-"){
   end_at--;
  }
  if (start_at < end_at+1){
   tmpDate = tmpDate.substring(start_at,end_at+1);
  }
  else{
   tmpDate = "";
  }
  aryDate = tmpDate.split("-");
  if (aryDate.length != 3){
   return(defDate);
  }
  for (i=0;i<3;i++){
   if (parseInt(aryDate[i],10)<1){
    aryDate[i] = "1";
   }
  }
  find_tag="000";
  for (i=2;i>=0;i--){
   if (aryDate[i].length==3){
    if (aryDate[i]>="001" && aryDate[i]<="012"){
     tmpMonth = parseInt(aryDate[i],10)-1;
     switch (i){
      case 0:
       find_tag = "100";
       one_at = parseInt(aryDate[1],10);
       two_at = parseInt(aryDate[2],10);
       break;
      case 1:
       find_tag = "010";
       one_at = parseInt(aryDate[0],10);
       two_at = parseInt(aryDate[2],10);
       break;
      case 2:
       find_tag = "001";
       one_at = parseInt(aryDate[0],10);
       two_at = parseInt(aryDate[1],10);
       break;
     }
    }
   }
  }
  if (find_tag!="000"){
   one_days = this.GetMonthDays(two_at,tmpMonth);
   two_days = this.GetMonthDays(one_at,tmpMonth);
   if ((one_at>one_days)&&(two_at>two_days)){
    return(defDate);
   }
   if ((one_at<=one_days)&&(two_at>two_days)){
    tmpYear = this.GetFormatYear(two_at);
    tmpDay = one_at;
   }
   if ((one_at>one_days)&&(two_at<=two_days)){
    tmpYear = this.GetFormatYear(one_at);
    tmpDay = two_at;
   }
   if ((one_at<=one_days)&&(two_at<=two_days)){
    tmpYear = this.GetFormatYear(one_at);
    tmpDay = two_at;
    tmpDate = this.DateFormat;
    year_at = tmpDate.indexOf("<yyyy>");
    if (year_at == -1){
     year_at = tmpDate.indexOf("<yy>");
    }
    day_at = tmpDate.indexOf("<dd>");
    if (day_at == -1){
     day_at = tmpDate.indexOf("<d>");
    }
    if (year_at >= day_at){
     tmpYear = this.GetFormatYear(two_at);
     tmpDay = one_at;
    }
   }
   return(new Date(tmpYear, tmpMonth, tmpDay));
  }
  find_tag = "000";
  for (i=2;i>=0;i--){
   if (parseInt(aryDate[i],10)>31){
    tmpYear = this.GetFormatYear(parseInt(aryDate[i],10));
    switch (i){
     case 0:
     find_tag = "100";
     one_at = parseInt(aryDate[1],10);
     two_at = parseInt(aryDate[2],10);
     break;
     case 1:
     find_tag = "010";
     one_at = parseInt(aryDate[0],10);
     two_at = parseInt(aryDate[2],10);
     break;
     case 2:
     find_tag = "001";
     one_at = parseInt(aryDate[0],10);
     two_at = parseInt(aryDate[1],10);
     break;
    }
   }
  }
  if (find_tag=="000"){
   tmpDate = this.DateFormat;
   year_at = tmpDate.indexOf("<yyyy>");
   if (year_at == -1){year_at = tmpDate.indexOf("<yy>");}
   month_at = tmpDate.indexOf("<MMMMMM>");
   if (month_at == -1){month_at = tmpDate.indexOf("<MMM>");}
   if (month_at == -1){month_at = tmpDate.indexOf("<mm>");}
   if (month_at == -1){month_at = tmpDate.indexOf("<m>");}
   day_at = tmpDate.indexOf("<dd>");
   if (day_at == -1){day_at = tmpDate.indexOf("<d>");}
   if ((year_at>month_at)&&(year_at>day_at)){find_tag="001"}
   if ((year_at>month_at)&&(year_at<=day_at)){find_tag="010";}
   if ((year_at<=month_at)&&(year_at>day_at)){find_tag="010";}
   if ((year_at<=month_at)&&(year_at<=day_at)){find_tag="100";}
   switch (find_tag){
    case "100":
    tmpYear = parseInt(aryDate[0],10);
    one_at = parseInt(aryDate[1],10);
    two_at = parseInt(aryDate[2],10);
    break;
    case "010":
    one_at = parseInt(aryDate[0],10);
    tmpYear = parseInt(aryDate[1],10);
    two_at = parseInt(aryDate[2],10);
    break;
    case "001":
    one_at = parseInt(aryDate[0],10);
    two_at = parseInt(aryDate[1],10);
    tmpYear = parseInt(aryDate[2],10);
    break;
   }
   tmpYear = this.GetFormatYear(tmpYear);
  }
  if (find_tag!="000"){
   if ((one_at>12)&&(two_at>12)){
    return(defDate);
   }
   if (one_at<=12){
    if (two_at > this.GetMonthDays(tmpYear,one_at-1)){ return(new Date(tmpYear, one_at-1, this.GetMonthDays(tmpYear,one_at-1)));
   }
   if (two_at>12){
    return(new Date(tmpYear, one_at-1, two_at));
   }
  }
  if (two_at<=12){
   if (one_at > this.GetMonthDays(tmpYear,two_at-1)){
    return(new Date(tmpYear, two_at-1, this.GetMonthDays(tmpYear,two_at-1)));
   }
   if (one_at>12){
    return(new Date(tmpYear, two_at-1, one_at));
   }
  }
  if ((one_at<=12)&&(two_at<=12)){
   tmpMonth = one_at-1;
   tmpDay = two_at;
   tmpDate = this.DateFormat;
   month_at = tmpDate.indexOf("<MMMMMM>");
   if (month_at == -1){month_at = tmpDate.indexOf("<MMM>");}
   if (month_at == -1){month_at = tmpDate.indexOf("<mm>");}
   if (month_at == -1){month_at = tmpDate.indexOf("<m>");}
   day_at = tmpDate.indexOf("<dd>");
   if (day_at == -1){day_at = tmpDate.indexOf("<d>");}
   if (month_at >= day_at){
    tmpMonth = two_at-1;
    tmpDay = one_at;
   }
   return(new Date(tmpYear, tmpMonth, tmpDay));
  }
 }
}
 this.CreateYearList = function(MinYear, MaxYear){ //create year list
  var theName = this.Name;
  var theYearObject = document.all.item(theName + "_YearList");
  if (theYearObject == null){
   return;
  }
  var theYear = 0;
  var theYearHTML = "<select id=\"" + theName + "_YearList\" tabIndex=\"-1\" onChange=\"document.jsMonthView.UpdateMonthGrid(this)\" style=\"font-size: 12pt; border: 1px #666666 outset;COLOR: #000066; font-weight: bold;background-color: #F4F8FB\">";
  for (theYear = MinYear; theYear <= MaxYear; theYear++){
   theYearHTML += "<option value=\"" + theYear.toString() + "\">" + theYear.toString() + "</option>";
  }
  theYearHTML += "</select>";
  theYearObject.outerHTML = theYearHTML;
 }
 this.CreateMonthList = function( ){ //create month list
  var theName = this.Name; var theMonthObject = document.all.item(theName + "_MonthList");
  if (theMonthObject == null){
   return;
  }
  var theMonth = 0;
  var theMonthHTML = "<select id=\"" + theName + "_MonthList\" style=\"font-size: 12pt; border: 1px #666666 outset;COLOR: #000066; font-weight: bold;background-color: #F4F8FB\" tabIndex=\"-1\" onChange=\"document.jsMonthView.UpdateMonthGrid(this)\">";
  for (theMonth = 0; theMonth < 12; theMonth++){
   theMonthHTML += "<option value=\"" + theMonth.toString() + "\">" + this.MonthName[theMonth] + "</option>";
  }
  theMonthHTML +="</select>";
  theMonthObject.outerHTML = theMonthHTML;
 }
 this.setDayList = function(theYear, theMonth, theDay){ //set the month view show a date
  var theName = this.Name;
  var theDayObject = document.all.item(theName + "_DayList");
  if (theDayObject == null){
   return;
  }
  theDayObject.value = theDay.toString();
  var theFirstDay = new Date(theYear, theMonth, 1);
  var theCurrentDate = new Date();
  var theWeek = theFirstDay.getDay();
  if (theWeek == 0){
   theWeek = 7;
  }
  var theLeftDay = 0;
  if (theMonth == 0){
   theLeftDay = 31;
  }else{
   theLeftDay = this.GetMonthDays(theYear, theMonth - 1);
  }
  var theRightDay = this.GetMonthDays(theYear, theMonth);
  var theCurrentDay = theLeftDay - theWeek + 1;
  var offsetMonth = -1; //the month is previous month
  var theColor = this.InvalidColor;
  var theBgColor = this.UnselectBgColor;
  var theBdColor = theBgColor;
  var WeekId = 0
  var DayId = 0;
  var theStyle = "";
  var theDayHTML = "<table width=\"100%\" height=\"100%\" border='0' cellpadding='0' cellspacing='1' bgcolor='#000000'>";
  theDayHTML += " <tr style=\"" + this.TitleStyle + "\">";
  for (DayId = 0; DayId < 7; DayId++){
   theDayHTML += " <td width=\"10%\" height='30' valign='middle' background='images/headerbg.gif' class='column_title_black'>" + this.WeekName[DayId] + "</td>";
  }
  theDayHTML += " </tr>";
  for (WeekId = 0; WeekId < 6; WeekId++){
   theDayHTML += " <tr style=\"" + this.DayStyle + "\">";
   for (DayId = 0; DayId < 7; DayId++){
//    alert('theCurrentDay:'+theCurrentDay+'     theLeftDay:'+theLeftDay+'     theRightDay:'+theRightDay+'     WeekId:'+WeekId);
    if ((theCurrentDay > theLeftDay) && (WeekId < 3)){
     offsetMonth++; //the month is current month;
     theCurrentDay = 1;
    }
    if ((theCurrentDay > theRightDay) && (WeekId > 3)){
     offsetMonth++; //the month is next month;
     theCurrentDay = 1;
    }
    switch (offsetMonth){
     case -1:
      theColor = this.InvalidColor;
      break;
     case 1:
      theColor = this.InvalidColor;
      break;
     case 0:
      if ((DayId==0)||(DayId==6)){
       theColor = this.WeekendColor;
      }
      else{
       theColor = this.ValidColor;
      }
     break;
    }
    if ((DayId==0)||(DayId==6)){
     theBgColor = this.WeekendBgColor;
    }else{
     theBgColor = this.UnselectBgColor;
    }
    theBdColor = this.DayBdColor;
    if ((theCurrentDay == theDay) && (offsetMonth == 0)){
     theColor = this.SelectedColor;
     theBgColor = this.SelectedBgColor;
     theBdColor = theBgColor;
    }
    if ((theYear == theCurrentDate.getFullYear()) && (theMonth == theCurrentDate.getMonth()) && (theCurrentDay == theCurrentDate.getDate()) && (offsetMonth == 0)){
     theBdColor = this.TodayBdColor;
    }
    theStyle = "border:" + this.DayBdWidth + "px solid " + theBdColor + "; color:" + theColor + "; background-color:" + theBgColor + ";";
    theDayHTML += " <td style=\"" + theStyle + "\" height='40'>";
    if ((((this.GetMonthDays(theYear, theMonth)-theCurrentDay)>10) && (WeekId < 3))||((((this.GetMonthDays(theYear, theMonth)-theCurrentDay)<=17)) && (WeekId >= 3))){//测试
     theDayHTML += "<a href='arrange1.asp?year="+theYear.toString()+"&month="+this.MonthName[theMonth].replace('月','')+"&day="+theCurrentDay.toString()+"' title='查看日程安排' class='arrange'>"
     theDayHTML += theCurrentDay.toString();
     theDayHTML += " </a>";
    }
    theDayHTML += " </td>";
    theCurrentDay++;
   }
   theDayHTML += " </tr>";
  }
  theDayHTML += " <tr style=\"" + this.FooterStyle + "\" onMouseDown=\"document.jsMonthView.CreateMonthGrid(" + theCurrentDate.getFullYear().toString() + ", " + theCurrentDate.getMonth().toString() + ", " + theCurrentDate.getDate().toString() + ");\">";
  theStyle = "border:" + this.DayBdWidth + "px solid " + this.TodayBdColor + ";";
  theDayHTML += " <td colspan=\"7\" height='50' align='center'><font size='5'>" + this.TodayTitle + " " + this.SetDateFormat(theCurrentDate.getFullYear(), theCurrentDate.getMonth(), theCurrentDate.getDate()) +" </font></td>";
  theDayHTML += " </tr>";
  theDayHTML += " </table>";
  var theMonthGrid = document.all.item(theName + "_MonthGrid");
  theMonthGrid.innerHTML = theDayHTML;
 }
 this.CreateMonthGrid = function(theYear, theMonth, theDay){ //refresh the month view to the date, main action is run this.setDayList() and set this.Source.value
  var theTextObject = this.Source;
  if (theTextObject == null){
   return;
  }
  var theName = this.Name;
  var theYearObject = document.all.item(theName + "_YearList");
  var theMonthObject = document.all.item(theName + "_MonthList");
  var tmpYear = theYear;
  var tmpMonth = theMonth;
  var tmpDay = 1;
  if (tmpMonth < 0){
   tmpYear--;
   tmpMonth = 11;
  }
  if (tmpMonth > 11){
   tmpYear++;
   tmpMonth = 0;
  }
  if (tmpYear < this.MinYear){
   tmpYear = this.MinYear;
  }
  if (tmpYear > this.MaxYear){
   tmpYear = this.MaxYear;
  }
  if (theDay < 1){
   tmpDay = 1;
  }else{
   tmpDay = this.GetMonthDays(tmpYear, tmpMonth);
   if (theDay < tmpDay){
    tmpDay = theDay;
   }
  }
  theYearObject.value = tmpYear;
  theMonthObject.value = tmpMonth;
  this.setDayList(tmpYear, tmpMonth, tmpDay);
  theTextObject.value = this.SetDateFormat(tmpYear, tmpMonth, tmpDay);
  theTextObject.select();
 }
 this.UpdateMonthGrid = function(theObject){ //run this.CreateMonthGrid() by theObject
  var theTextObject = this.Source;
  if (theTextObject == null){
   return;
  }
  var theName = this.Name;
  var theYearObject = document.all.item(theName + "_YearList");
  var theMonthObject = document.all.item(theName + "_MonthList");
  var theDayObject = document.all.item(theName + "_DayList");
  var tmpName = theObject.id.substr(theObject.id.lastIndexOf("_"));
  switch (tmpName){
  case "_goPreviousMonth": //go previous month button
   theObject.disabled = true;
   this.CreateMonthGrid(parseInt(theYearObject.value, 10), parseInt(theMonthObject.value, 10) - 1, parseInt(theDayObject.value, 10));
   theObject.disabled = false;
   break;
  case "_goNextMonth": //go next month button
   theObject.disabled = true;
   this.CreateMonthGrid(parseInt(theYearObject.value, 10), parseInt(theMonthObject.value, 10) + 1, parseInt(theDayObject.value, 10));
   theObject.disabled = false;
   break;
  case "_goNextYear": //go next month button
   theObject.disabled = true;
   this.CreateMonthGrid(parseInt(theYearObject.value, 10) + 1, parseInt(theMonthObject.value, 10), parseInt(theDayObject.value, 10));
   theObject.disabled = false;
   break;
  case "_goPreviousYear": //go next month button
   theObject.disabled = true;
   this.CreateMonthGrid(parseInt(theYearObject.value, 10) - 1, parseInt(theMonthObject.value, 10), parseInt(theDayObject.value, 10));
   theObject.disabled = false;
   break;
  case "_YearList": //year list
   this.CreateMonthGrid(parseInt(theYearObject.value, 10), parseInt(theMonthObject.value, 10), parseInt(theDayObject.value, 10));
   break;
  case "_MonthList": //month list
   this.CreateMonthGrid(parseInt(theYearObject.value, 10), parseInt(theMonthObject.value, 10), parseInt(theDayObject.value, 10));
   break;
  default:
   return;
  }
 }
 this.DeleteMonthGrid = function( ){ //check document focus, if blur this.Source then delete this
  var theName = this.Name;
  var theDivObject = document.all.item(theName + "_MonthView");
  if (theDivObject == null){
   return;
  }
  var tmpObject = document.activeElement;
  while (tmpObject != null){
   if (tmpObject == this.Source){
    return;
   }
   //if (tmpObject.id == theName + "_MonthView"){
   // return;
   //}
   //if (tmpObject.id == theName + "_MonthGrid"){
   // return;
   //}
   if (tmpObject.id == theName + "_goPreviousMonth"){
   return;
   }
   if (tmpObject.id == theName + "_goNextMonth"){
   return;
   }
   if (tmpObject.id == theName + "_goNextYear"){
   return;
   }
   if (tmpObject.id == theName + "_goPreviousYear"){
   return;
   }
   if (tmpObject.id == theName + "_YearList"){
   return;
   }
   if (tmpObject.id == theName + "_MonthList"){
   return;
   }
   if (tmpObject.id == theName + "_DayList"){
   return;
   }
   tmpObject = tmpObject.parentElement;
  }
  if (tmpObject == null){ //delete the month view
   theDivObject.outerHTML = "";
   var theDate = new Date(this.GetTextDate(this.Source.value));
   if (isNaN(theDate)){
    this.Source.value = "";
   }else{
    this.Source.value = this.SetDateFormat(theDate.getFullYear(), theDate.getMonth(), theDate.getDate());
   }
   this.Source = null;
  }
 }
 this.InitialMonthView = function( ){
  var theName = this.Name;
  var theValue = this.Source.value;
  var theCurrentDate = new Date(this.GetTextDate(theValue));
  if (isNaN(theCurrentDate)){
   theCurrentDate = new Date();
  }
  var theDivHTML = "<div id=\"" + theName + "_MonthView\" onBlur=\"document.jsMonthView.DeleteMonthGrid();\">";
  theDivHTML += " <table width='600' height='300' style=\"" + this.MonthGridStyle + "\" cellpadding=\"0\" cellspacing=\"0\">";
  theDivHTML += " <tr>";
  theDivHTML += " <td align=\"center\" valign=\"top\">";
  theDivHTML += " <table width=\"100%\" height=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  theDivHTML += " <tr align=\"center\" style=\"" + this.HeaderStyle + "\">";
  theDivHTML += " <td colspan='3' width='100%'>";
  theDivHTML += " <input type=\"button\" tabIndex=\"-1\" style=\"" + this.MonthBtStyle + "\" id=\"" + theName + "_goPreviousYear\" value=\"" + this.PreviousMonthText + "\" onClick=\"document.jsMonthView.UpdateMonthGrid(this)\" title='上一年' class='button'>";
  theDivHTML += " <select id=\"" + theName + "_YearList\">";
  theDivHTML += " </select>";
  theDivHTML += " <input type=\"button\" tabIndex=\"-1\" style=\"" + this.MonthBtStyle + "\" id=\"" + theName + "_goNextYear\" value=\"" + this.NextMonthText + "\" onClick=\"document.jsMonthView.UpdateMonthGrid(this)\"  title='下一年' class='button'><span style='color: #004080;font-weight: bold;font-size: 18px;'>&nbsp;年</span>";
  theDivHTML += " <input type=\"button\" tabIndex=\"-1\" style=\"" + this.MonthBtStyle + "\" id=\"" + theName + "_goPreviousMonth\" value=\"" + this.PreviousMonthText + "\" onClick=\"document.jsMonthView.UpdateMonthGrid(this)\" title='上一月' class='button'>";
  theDivHTML += " <select id=\"" + theName + "_MonthList\">";
  theDivHTML += " </select>";
  theDivHTML += " <input type=\"button\" tabIndex=\"-1\" style=\"" + this.MonthBtStyle + "\" id=\"" + theName + "_goNextMonth\" value=\"" + this.NextMonthText + "\" onClick=\"document.jsMonthView.UpdateMonthGrid(this)\"  title='下一月' class='button'><span style='color: #004080;font-weight: bold;font-size: 18px;'>&nbsp;月</span>";
  theDivHTML += " <input type=\"hidden\" id=\"" + theName + "_DayList\" value=\"1\">";
  theDivHTML += " </td>";
  theDivHTML += " </tr>";
  theDivHTML += " <tr>";
  theDivHTML += " <td colspan=\"4\" bgcolor=\"" + this.UnselectBgColor + "\">";
  theDivHTML += " <div id=\"" + theName + "_MonthGrid\"><br></div>";
  theDivHTML += " </td>";
  theDivHTML += " </tr>";
  theDivHTML += " </table>";
  theDivHTML += " </td>";
  theDivHTML += " </tr>";
  theDivHTML += " </table>";
  theDivHTML += " </div>";
  document.body.insertAdjacentHTML("beforeEnd", theDivHTML);
  theDivObject = document.all.item(theName + "_MonthView");
  theDivObject.style.position = "absolute";
  theDivObject.style.posLeft = this.GetoffsetLeft(this.Source)+100;
  theDivObject.style.posTop = this.GetoffsetTop(this.Source) + this.Source.offsetHeight;
  this.CreateYearList(this.MinYear, this.MaxYear);
  this.CreateMonthList();
  this.CreateMonthGrid(theCurrentDate.getFullYear(), theCurrentDate.getMonth(), theCurrentDate.getDate());
 }
}
function CreateMonthView(theTextObject){ //the month view create interface, fire at element's onFocus event
 //if (theTextObject.readOnly == true){
 //return;
 //}
 if (document.jsMonthView != null){
  if (document.jsMonthView.Source == theTextObject){
   return;
  }
  else{
   document.jsMonthView.DeleteMonthGrid();
  }
 }
 document.jsMonthView = new DefineMonthView(theTextObject);
 //insert your code, change the month view propertiy
 //example:
 // document.jsMonthView.DateFormat = "<MMM> <d>,<yyyy>";
 document.jsMonthView.InitialMonthView();
 theTextObject.select();
}
function DeleteMonthView(theTextObject){ //the month view delete interface, fire at element's onBlur event
 if (document.jsMonthView == null){
  return;
 }
 document.jsMonthView.DeleteMonthGrid();
 if (document.jsMonthView.Source == null){
  document.jsMonthView = null;
 }
}
//-->
</SCRIPT>


该文章转载自网络大本营:http://www.xrss.cn/Dev/Other/200610105587.Html





文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Java 日曆
相关日志:

评论: 1 | 引用: 0 | 查看次数: 7557
回复回复Arlene[2015-12-09 01:11 AM | del]
thank so a lot for your site it helps a lot.
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭