jsMonthView1.1。对日期的判断更加精准,另外增加了自定义属性的示例代码,示例代码是将英文变成中文.(2/3)

发表于:2007-06-30来源:作者:点击数: 标签:
this.GetTextDate = function(theString){ //convert a string to a date, if the string is not a date, return a empty string var i = 0, j = 0, tmpChar = , find_tag = ; var start_at = 0, end_at = 0, year_at = 0, month_at = 0, day_at = 0; var tmp
  this.GetTextDate = function(theString){ //convert a string to a date, if the string is not a date, return a empty string
    var i = 0, j = 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 = "";
    tmpDate = tmpDate.replace(/(\D)0(\d)/g, "$1-$2");
    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);
    }
    tmp_at = 0;
    for (i = 0; i < 3; i++){
      if (parseInt(aryDate[i], 10)==0){
        tmp_at++;
        year_at = i;
      }
    }
    if (tmp_at > 1){
      return(defDate);
    }
    if (tmp_at == 1){
      aryDate[year_at] = this.GetFormatYear(aryDate[year_at]).toString();
    }
    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>");
    }
    find_tag = "000";
    for (i = 0; i < 3; i++){
      if (aryDate[i].length == 3){
        if ((aryDate[i] >= "001") && (aryDate[i] <= "012")){
          if (find_tag != "000"){
            return(defDate);
          }
          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)){
        switch (find_tag){
          case "100": //default month,day,year
            tmpDay = one_at;
            tmpYear = this.GetFormatYear(two_at);
            if ((month_at > year_at) && (month_at > day_at)){
              if (day_at > year_at){
                tmpYear = this.GetFormatYear(one_at);
                tmpDay = two_at;
              }
            }
            break;
          case "010": //default day,month,year
            tmpDay = one_at;
            tmpYear = this.GetFormatYear(two_at);
            if (((month_at > year_at) && (month_at < day_at)) || ((month_at < year_at) && (month_at > day_at))){
              if (day_at > year_at){
                tmpYear = this.GetFormatYear(one_at);
                tmpDay = two_at;
              }
            }
            break;
          case "001": //default year,day,month
            tmpYear = this.GetFormatYear(one_at);
            tmpDay = two_at;    
            if ((month_at < year_at) && (month_at < day_at)){
              if (year_at > day_at){
                tmpDay = one_at;
                tmpYear = this.GetFormatYear(two_at);
              }
            }
            break;
          default: //default day,year
            tmpDay = one_at;
            tmpYear = this.GetFormatYear(two_at);
        }
      }
      return(new Date(tmpYear, tmpMonth, tmpDay));
    }
    find_tag = "000";
    for (i = 0; i < 3; i++){
      if (parseInt(aryDate[i], 10) > 31){
        if (find_tag!="000"){
          return(defDate);
        }
        tmpYear = this.GetFormatYear(aryDate[i]);
        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"){
      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"){
      return(defDate);
    }else{
      if ((one_at > 12) && (two_at > 12)){
        return(defDate);
      }
      if ((one_at <= 12) && (two_at > 12)){
        if (two_at > this.GetMonthDays(tmpYear,one_at-1)){
          return(new Date(tmpYear, one_at-1, this.GetMonthDays(tmpYear,one_at-1)));
        }else{
          return(new Date(tmpYear, one_at-1, two_at));
        }
      }
      if ((one_at > 12) && (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)));
        }else{
          return(new Date(tmpYear, two_at-1, one_at));
        }
      }
      if ((one_at <= 12) && (two_at <= 12)){
        tmpMonth = one_at-1;
        tmpDay = two_at;
        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\" style=\"" + this.YearListStyle + "\" tabIndex=\"-1\" onChange=\"document.jsMonthView.UpdateMonthGrid(this)\" onBlur=\"document.jsMonthView.DeleteMonthGrid()\">";
    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=\"" + this.MonthListStyle + "\" tabIndex=\"-1\" onChange=\"document.jsMonthView.UpdateMonthGrid(this)\" onBlur=\"document.jsMonthView.DeleteMonthGrid()\">";
    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\" cellspacing=\"0\" cellpadding=\"0\">";
    theDayHTML += "     <tr style=\"" + this.TitleStyle + "\">";
    for (DayId = 0; DayId < 7; DayId++){
      theDayHTML += "     <td width=\"10%\" style=\"" + this.WeekListStyle + "\">" + this.WeekName[DayId] + "</td>";
    }
    theDayHTML += "     </tr>";
    theDayHTML += "     <tr>";
    theDayHTML += "       <td colspan=\"7\" style=\"" + this.LineBgStyle + "\">";
    theDayHTML += "         <table style=\"" + this.LineStyle + "\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
    theDayHTML += "           <tr><td></td></tr>";
    theDayHTML += "         </table>";
    theDayHTML += "       </td>";
    theDayHTML += "     </tr>";
    for (WeekId = 0; WeekId < 6; WeekId++){
      theDayHTML += "   <tr style=\"" + this.DayStyle + "\">";
      for (DayId = 0; DayId < 7; DayId++){
        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 + " solid " + theBdColor + "; color:" + theColor + "; background-color:" + theBgColor + ";";
        theDayHTML += "<td style=\"" + theStyle + "\" onMouseOver=\"" + this.OverDayStyle + "\" onMouseOut=\"" + this.OutDayStyle + "\" onMouseDown=\"document.jsMonthView.CreateMonthGrid(" + theYear.toString() + ", " + (theMonth + offsetMonth).toString() + ", " + theCurrentDay.toString() + ")\">";
        theDayHTML += theCurrentDay.toString();
        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 + " solid " + this.TodayBdColor + "; " + this.TodayListStyle + ";";
    theDayHTML += "    <td style=\"" + theStyle + "\"><br></td>";
    theDayHTML += "    <td colspan=\"6\" style=\"" + this.TodayListStyle + "\"> " + this.TodayTitle + " " + this.SetDateFormat(theCurrentDate.getFullYear(), theCurrentDate.getMonth(), theCurrentDate.getDate()) + "</td>";
    theDayHTML += "  </tr>";
    theDayHTML += "</table>";
    var theMonthGrid = document.all.item(theName + "_MonthGrid");
    theMonthGrid.innerHTML = theDayHTML;
  }

原文转自:http://www.ltesting.net