一个很好的日期JS

<link href="js/calendar-winter.css" rel="stylesheet" type="text/css" />
        <SCRIPT language=JavaScript src="js/calendarSel.js"></SCRIPT>
        <SCRIPT language=JavaScript src="js/calendar.js"></SCRIPT>
        <SCRIPT language=JavaScript src="js/calendar-cn.js"></SCRIPT>

 

调用方法:

<td  height="28" width="100" align="right" class="bor-xuxian-gre">&nbsp;有效期:</td><td align="left" colspan="2" bgcolor="#FFFFFF" class="bor-xuxian-gre">&nbsp;<input type="text" name="End_date" value="<%=year(now())&"-"&month(now())&"-"&day(now())%>"  /> <a href="#" οnclick="return showCalendar('End_date', 'y-mm-dd','gmtStart_TIME');"><img src="../images/date.gif" align="absmiddle" border="0" /></a> <input name="gmtStart_TIME" type="text"   value="<%=Time()%>" maxLength="10"></td> 

 

calendar-winter.css

 

/* The main calendar widget.  DIV containing a table. */

div.calendar 
{ position: relative; }

.calendar, .calendar table 
{
  border
: 1px solid #556;
  font-size
: 11px;
  color
: #000;
  cursor
: default;
  background
: #eef;
  font-family
: tahoma,verdana,sans-serif;
}


/* Header part -- contains navigation buttons and day names. */

.calendar .button 
{ /* "<<", "<", ">", ">>" buttons have this class */
  text-align
: center;    /* They are the navigation buttons */
  padding
: 2px;          /* Make the buttons seem like they're pressing */
}


.calendar thead .title 
{ /* This holds the current "month, year" */
  font-weight
: bold;      /* Pressing it will take you to the current date */
  text-align
: center;
  background
: #fff;
  color
: #000;
  padding
: 2px;
}


.calendar thead .headrow 
{ /* Row <TR> containing navigation buttons */
  background
: #778;
  color
: #fff;
}


.calendar thead .daynames 
{ /* Row <TR> containing the day names */
  background
: #bdf;
}


.calendar thead .name 
{ /* Cells <TD> containing the day names */
  border-bottom
: 1px solid #556;
  padding
: 2px;
  text-align
: center;
  color
: #000;
}


.calendar thead .weekend 
{ /* How a weekend day name shows in header */
  color
: #a66;
}


.calendar thead .hilite 
{ /* How do the buttons in header appear when hover */
  background
: #aaf;
  color
: #000;
  border
: 1px solid #04f;
  padding
: 1px;
}


.calendar thead .active 
{ /* Active (pressed) buttons in header */
  background
: #77c;
  padding
: 2px 0px 0px 2px;
}


/* The body part -- contains all the days in month. */

.calendar tbody .day 
{ /* Cells <TD> containing month days dates */
  width
: 2em;
  color
: #456;
  text-align
: right;
  padding
: 2px 4px 2px 2px;
}


.calendar table .wn 
{
  padding
: 2px 3px 2px 2px;
  border-right
: 1px solid #000;
  background
: #bdf;
}


.calendar tbody .rowhilite td 
{
  background
: #def;
}


.calendar tbody .rowhilite td.wn 
{
  background
: #eef;
}


.calendar tbody td.hilite 
{ /* Hovered cells <TD> */
  background
: #def;
  padding
: 1px 3px 1px 1px;
  border
: 1px solid #bbb;
}


.calendar tbody td.active 
{ /* Active (pressed) cells <TD> */
  background
: #cde;
  padding
: 2px 2px 0px 2px;
}


.calendar tbody td.selected 
{ /* Cell showing today date */
  font-weight
: bold;
  border
: 1px solid #000;
  padding
: 1px 3px 1px 1px;
  background
: #fff;
  color
: #000;
}


.calendar tbody td.weekend 
{ /* Cells showing weekend days */
  color
: #a66;
}


.calendar tbody td.today 
{ /* Cell showing selected date */
  font-weight
: bold;
  color
: #00f;
}


.calendar tbody .disabled 
{ color: #999; }

.calendar tbody .emptycell 
{ /* Empty cells (the best is to hide them) */
  visibility
: hidden;
}


.calendar tbody .emptyrow 
{ /* Empty row (some months need less than 6 rows) */
  display
: none;
}


/* The footer part -- status bar and "Close" button */

.calendar tfoot .footrow 
{ /* The <TR> in footer (only one right now) */
  text-align
: center;
  background
: #556;
  color
: #fff;
}


.calendar tfoot .ttip 
{ /* Tooltip (status bar) cell <TD> */
  background
: #fff;
  color
: #445;
  border-top
: 1px solid #556;
  padding
: 1px;
}


.calendar tfoot .hilite 
{ /* Hover style for buttons in footer */
  background
: #aaf;
  border
: 1px solid #04f;
  color
: #000;
  padding
: 1px;
}


.calendar tfoot .active 
{ /* Active (pressed) style for buttons in footer */
  background
: #77c;
  padding
: 2px 0px 0px 2px;
}


/* Combo boxes (menus that display months/years for direct selection) */

.combo 
{
  position
: absolute;
  display
: none;
  top
: 0px;
  left
: 0px;
  width
: 4em;
  cursor
: default;
  border
: 1px solid #655;
  background
: #def;
  color
: #000;
  font-size
: smaller;
}


.combo .label 
{
  width
: 100%;
  text-align
: center;
}


.combo .hilite 
{
  background
: #acf;
}


.combo .active 
{
  border-top
: 1px solid #46a;
  border-bottom
: 1px solid #46a;
  background
: #eef;
  font-weight
: bold;
}

 

calendarSel.js

var  oldLink  =   null ;
function  setActiveStyleSheet(link, title) {
  
var  i, a, main;
  
for (i = 0 ; (a  =  document.getElementsByTagName( " link " )[i]); i ++ ) {
    
if (a.getAttribute( " rel " ).indexOf( " style " !=   - 1   &&  a.getAttribute( " title " )) {
      a.disabled 
=   true ;
      
if (a.getAttribute( " title " ==  title) a.disabled  =   false ;
    }
  }
  
return   false ;
}

function  selected(cal, date) {
  cal.sel.value 
=  date;
  
if  (cal.sel.id  ==   " sel1 "   ||  cal.sel.id  ==   " sel3 " )
    cal.callCloseHandler();
}

function  closeHandler(cal) {
  cal.hide();
}

function  showCalendar(id, format, timeField) {
  
var  el  =  document.getElementById(id);
  
if  (calendar  !=   null ) {
    calendar.hide();                 
//  so we hide it first.
  }  else  {
    
var  cal  =   new  Calendar( false null , selected, closeHandler);
    calendar 
=  cal;                   //  remember it in the global var
    cal.setRange( 1900 2070 );         //  min/max year allowed.
    cal.create();
  }
  
if (el.value.replace( / ( ^ s * ) | (s * $) / g,   "" !=   ''   &&   ! isDate(el.value)){
    alert(
' 日期格式不对,正确的格式为: 年-月-日。例如:2000-01-01 ' );
    el.value 
=   '' ;
  }
  calendar.setDateFormat(format);    
//  set the specified date format
  calendar.parseDate(el.value);       //  try to parse the text in field
  calendar.sel  =  el;                  //  inform it what input field we use
  calendar.showAtElement(el);         //  show the calendar below it
   if (document.all[timeField]){
    
var  today = new  Date();
    
var  hours = today.getHours(); 
    
var  minutes = today.getMinutes(); 
    
var  seconds = today.getSeconds();
    
var  timeValue  =  (hours < 10 ) ? ( " 0 " + hours):(hours);
    timeValue
+= (minutes < 10 ) ? ( " :0 " + minutes + "" ):( " : " + minutes);
    timeValue
+= (seconds < 10 ) ? ( " :0 " + seconds + "" ):( " : " + seconds);

    
if (timeValue.length == 8 ){
        document.all[timeField].value 
=  timeValue;
    }
else {
        alert(
" 系统初始化时间异常,请点击图标重新设定。 " );
        
return   false ;
    }
  }
  
return   false ;
}

/* *
 * 获取基础对象
 * @param el 基础对象
 
*/
function  getAbsolutePos(el) {
    
var  r  =  { x: el.offsetLeft, y: el.offsetTop };
    
if  (el.offsetParent) {
        
var  tmp  =  getAbsolutePos(el.offsetParent);
        r.x 
+=  tmp.x;
        r.y 
+=  tmp.y;
    }
    
return  r;
}
function  sAlert(url,x,y)
{
    
if (parent.document.frames[ ' pluginCalendar ' ]){
        parent.document.body.removeChild(parent.document.getElementById(
' bgDiv ' ));
        parent.document.body.removeChild(parent.document.getElementById(
' msgDiv ' ));
    }
    
var  sWidth,sHeight;
    sWidth
= parent.document.body.offsetWidth;
    sHeight
= screen.height;
    
var  bgObj = parent.document.createElement( " div " );
    bgObj.setAttribute(
' id ' , ' bgDiv ' );
    bgObj.style.position
= " absolute " ;

    parent.document.body.appendChild(bgObj);

    
var  msgObj = parent.document.createElement( " div " )
    msgObj.setAttribute(
" id " , " msgDiv " );
    msgObj.style.position 
=   " absolute " ;
    msgObj.style.left 
=  x  +   ' px ' ;
    msgObj.style.top 
=  y  +   " px " ;

    parent.document.body.appendChild(msgObj);
    
var  txt = parent.document.createElement( " p " );
    txt.setAttribute(
" id " , " msgTxt " );
    txt.innerHTML
= " <iframe id="pluginCalendar" src=' " + url + " ' scrolling="no" frameborder="0" height="150px" width="228px"/> " ;
    parent.document.getElementById(
" msgDiv " ).appendChild(txt);
}
function  showPluginCalendar(pluginId,pel, el, format) {
    
if (pel  &&  el){
        
var  ps;
        
var  p  =  getAbsolutePos(pel);
        
var  iframe  =  parent.document.frames[ " plugin_ "   +  pluginId];
        
if  (iframe  !=  undefined  &&  iframe  !=   null ){
            fps 
=  getAbsolutePos(parent.document.all( " plugin_ "   +  pluginId));
            
var  top  =  iframe.document.body.scrollTop;
            sAlert(
' /qbuilder/general/plugin/plugin_calendar.jsp?pluginId= ' + pluginId  +   " &rowId= " + pel.id  +   " &elementId= "   +  el.id  +   " &format= "   +  format,(fps.x  +  p.x),(fps.y  +  p.y  +  pel.offsetHeight  -  top));
        }
        
return ;
    }
}

var  MINUTE  =   60   *   1000 ;
var  HOUR  =   60   *  MINUTE;
var  DAY  =   24   *  HOUR;
var  WEEK  =   7   *  DAY;

function  isDisabled(date) {
  
var  today  =   new  Date();
  
return  (Math.abs(date.getTime()  -  today.getTime())  /  DAY)  >   10 ;
}

function  flatSelected(cal, date) {
  
var  el  =  document.getElementById( " preview " );
  el.innerHTML 
=  date;
}

function  showFlatCalendar() {
  
var  parent  =  document.getElementById( " display " );
  
var  cal  =   new  Calendar( false null , flatSelected);
  cal.weekNumbers 
=   false ;
  cal.setDisabledHandler(isDisabled);
  cal.setDateFormat(
" DD, M d " );
  cal.create(parent);
  cal.show();
}
function  isDate (theStr) {
    
var  the1st  =  theStr.indexOf( ' - ' );
    
var  the2nd  =  theStr.lastIndexOf( ' - ' );

    
if  (the1st  ==  the2nd) {  return ( false ); }
    
else  {
    
var  y  =  theStr.substring( 0 ,the1st);
    
var  m  =  theStr.substring(the1st + 1 ,the2nd);
    
var  d  =  theStr.substring(the2nd + 1 ,theStr.length);
    
var  maxDays  =   31 ;

    
if  (isInt(m) == false   ||  isInt(d) == false   ||  isInt(y) == false ) {
    
return ( false ); }
    
else   if  (y.length  <   4 ) {  return ( false ); }
    
else   if  ( ! isBetween (m,  1 12 )) {  return ( false ); }
    
else   if  (m == 4   ||  m == 6   ||  m == 9   ||  m == 11 ) maxDays  =   30 ;
    
else   if  (m == 2 ) {
    
if  (y  %   4   >   0 ) maxDays  =   28 ;
    
else   if  (y  %   100   ==   0   &&  y  %   400   >   0 ) maxDays  =   28 ;
    
else  maxDays  =   29 ;
    }
    
if  (isBetween(d,  1 , maxDays)  ==   false ) {  return ( false ); }
    
else  {  return ( true ); }
    }
}
function  isInt (theStr) {
var  flag  =   true ;

if  (isEmpty(theStr)) { flag = false ; }
else
for  ( var  i = 0 ; i < theStr.length; i ++ ) {
if  (isDigit(theStr.substring(i,i + 1 ))  ==   false ) {
flag 
=   false break ;
}
}
}
return (flag);
}
function  isBetween (val, lo, hi) {
if  ((val  <  lo)  ||  (val  >  hi)) {  return ( false ); }
else  {  return ( true ); }
}
function  isEmpty (str) {
if  ((str == null ) || (str.length == 0 ))  return   true ;
else   return ( false );
}
function  isDigit(s)
{
var  patrn =/^ ((( +|- ) ? d + (.d * ) ? ) | (( +|- ) ? (d * .) ? d + ))$ / ;
if  ( ! patrn.exec(s))  return   false ;
return   true ;
}

calendar.js


Calendar
= function (mondayFirst,dateStr,onSelected,onClose){ this .activeDiv = null ; this .currentDateEl = null ; this .checkDisabled = null ; this .timeout = null ; this .onSelected = onSelected || null ; this .onClose = onClose || null ; this .dragging = false ; this .hidden = false ; this .minYear = 1970 ; this .maxYear = 2050 ; this .dateFormat = Calendar._TT[ " DEF_DATE_FORMAT " ]; this .ttDateFormat = Calendar._TT[ " TT_DATE_FORMAT " ]; this .isPopup = true ; this .weekNumbers = true ; this .mondayFirst = mondayFirst; this .dateStr = dateStr; this .ar_days = null ; this .table = null ; this .element = null ; this .tbody = null ; this .firstdayname = null ; this .monthsCombo = null ; this .yearsCombo = null ; this .hilitedMonth = null ; this .activeMonth = null ; this .hilitedYear = null ; this .activeYear = null ; if ( ! Calendar._DN3){ var  ar = new  Array(); for ( var  i = 8 ;i > 0 ;){ar[ -- i] = Calendar._DN[i].substr( 0 , 3 );};Calendar._DN3 = ar;ar = new  Array(); for ( var  i = 12 ;i > 0 ;){ar[ -- i] = Calendar._MN[i].substr( 0 , 3 );};Calendar._MN3 = ar;}};Calendar._C = null ;Calendar.is_ie = ((navigator.userAgent.toLowerCase().indexOf( " msie " ) !=- 1 ) && (navigator.userAgent.toLowerCase().indexOf( " opera " ) ==- 1 ));Calendar._DN3 = null ;Calendar._MN3 = null ;Calendar.getAbsolutePos = function (el){ var  r = {x:el.offsetLeft,y:el.offsetTop}; if (el.offsetParent){ var  tmp = Calendar.getAbsolutePos(el.offsetParent);r.x += tmp.x;r.y += tmp.y;}; return  r;};Calendar.isRelated = function (el,evt){ var  related = evt.relatedTarget; if ( ! related){ var  type = evt.type; if (type == " mouseover " ){related = evt.fromElement;} else   if (type == " mouseout " ){related = evt.toElement;}} while (related){ if (related == el){ return   true ;};related = related.parentNode;}; return   false ;};Calendar.removeClass = function (el,className){ if ( ! (el && el.className)){ return ;}; var  cls = el.className.split( "   " ); var  ar = new  Array(); for ( var  i = cls.length;i > 0 ;){ if (cls[ -- i] != className){ar[ar.length] = cls[i];}};el.className = ar.join( "   " );};Calendar.addClass = function (el,className){Calendar.removeClass(el,className);el.className += "   " + className;};Calendar.getElement = function (ev){ if (Calendar.is_ie){ return  window.event.srcElement;} else { return  ev.currentTarget;}};Calendar.getTargetElement = function (ev){ if (Calendar.is_ie){ return  window.event.srcElement;} else { return  ev.target;}};Calendar.stopEvent = function (ev){ if (Calendar.is_ie){window.event.cancelBubble = true ;window.event.returnValue = false ;} else {ev.preventDefault();ev.stopPropagation();}};Calendar.addEvent = function (el,evname,func){ if (Calendar.is_ie){el.attachEvent( " on " + evname,func);} else {el.addEventListener(evname,func, true );}};Calendar.removeEvent = function (el,evname,func){ if (Calendar.is_ie){el.detachEvent( " on " + evname,func);} else {el.removeEventListener(evname,func, true );}};Calendar.createElement = function (type,parent){ var  el = null ; if (document.createElementNS){el = document.createElementNS( " http://www.w3.org/1999/xhtml " ,type);} else {el = document.createElement(type);}; if ( typeof  parent != " undefined " ){parent.appendChild(el);}; return  el;};Calendar._add_evs = function (el){ with (Calendar){addEvent(el, " mouseover " ,dayMouseOver);addEvent(el, " mousedown " ,dayMouseDown);addEvent(el, " mouseout " ,dayMouseOut); if (is_ie){addEvent(el, " dblclick " ,dayMouseDblClick);el.setAttribute( " unselectable " , true );}}};Calendar.findMonth = function (el){ if ( typeof  el.month != " undefined " ){ return  el;} else   if ( typeof  el.parentNode.month != " undefined " ){ return  el.parentNode;}; return   null ;};Calendar.findYear = function (el){ if ( typeof  el.year != " undefined " ){ return  el;} else   if ( typeof  el.parentNode.year != " undefined " ){ return  el.parentNode;}; return   null ;};Calendar.showMonthsCombo = function (){ var  cal = Calendar._C; if ( ! cal){ return   false ;}; var  cal = cal; var  cd = cal.activeDiv; var  mc = cal.monthsCombo; if (cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth, " hilite " );}; if (cal.activeMonth){Calendar.removeClass(cal.activeMonth, " active " );}; var  mon = cal.monthsCombo.getElementsByTagName( " div " )[cal.date.getMonth()];Calendar.addClass(mon, " active " );cal.activeMonth = mon;mc.style.left = cd.offsetLeft + " px " ;mc.style.top = (cd.offsetTop + cd.offsetHeight) + " px " ;mc.style.display = " block " ;};Calendar.showYearsCombo = function (fwd){ var  cal = Calendar._C; if ( ! cal){ return   false ;}; var  cal = cal; var  cd = cal.activeDiv; var  yc = cal.yearsCombo; if (cal.hilitedYear){Calendar.removeClass(cal.hilitedYear, " hilite " );}; if (cal.activeYear){Calendar.removeClass(cal.activeYear, " active " );};cal.activeYear = null ; var  Y = cal.date.getFullYear() + (fwd ? 1 : - 1 ); var  yr = yc.firstChild; var  show = false ; for ( var  i = 12 ;i > 0 ; -- i){ if (Y >= cal.minYear && Y <= cal.maxYear){yr.firstChild.data = Y;yr.year = Y;yr.style.display = " block " ;show = true ;} else {yr.style.display = " none " ;};yr = yr.nextSibling;Y += fwd ? 2 : - 2 ;}; if (show){yc.style.left = cd.offsetLeft + " px " ;yc.style.top = (cd.offsetTop + cd.offsetHeight) + " px " ;yc.style.display = " block " ;}};Calendar.tableMouseUp = function (ev){ var  cal = Calendar._C; if ( ! cal){ return   false ;}; if (cal.timeout){clearTimeout(cal.timeout);}; var  el = cal.activeDiv; if ( ! el){ return   false ;}; var  target = Calendar.getTargetElement(ev);Calendar.removeClass(el, " active " ); if (target == el || target.parentNode == el){Calendar.cellClick(el);}; var  mon = Calendar.findMonth(target); var  date = null ; if (mon){date = new  Date(cal.date); if (mon.month != date.getMonth()){date.setMonth(mon.month);cal.setDate(date);}} else { var  year = Calendar.findYear(target); if (year){date = new  Date(cal.date); if (year.year != date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);}}}; with (Calendar){removeEvent(document, " mouseup " ,tableMouseUp);removeEvent(document, " mouseover " ,tableMouseOver);removeEvent(document, " mousemove " ,tableMouseOver);cal._hideCombos();stopEvent(ev);_C = null ;}};Calendar.tableMouseOver = function (ev){ var  cal = Calendar._C; if ( ! cal){ return ;}; var  el = cal.activeDiv; var  target = Calendar.getTargetElement(ev); if (target == el || target.parentNode == el){Calendar.addClass(el, " hilite active " );Calendar.addClass(el.parentNode, " rowhilite " );} else {Calendar.removeClass(el, " active " );Calendar.removeClass(el, " hilite " );Calendar.removeClass(el.parentNode, " rowhilite " );}; var  mon = Calendar.findMonth(target); if (mon){ if (mon.month != cal.date.getMonth()){ if (cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth, " hilite " );};Calendar.addClass(mon, " hilite " );cal.hilitedMonth = mon;} else   if (cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth, " hilite " );}} else { var  year = Calendar.findYear(target); if (year){ if (year.year != cal.date.getFullYear()){ if (cal.hilitedYear){Calendar.removeClass(cal.hilitedYear, " hilite " );};Calendar.addClass(year, " hilite " );cal.hilitedYear = year;} else   if (cal.hilitedYear){Calendar.removeClass(cal.hilitedYear, " hilite " );}}};Calendar.stopEvent(ev);};Calendar.tableMouseDown = function (ev){ if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)){Calendar.stopEvent(ev);}};Calendar.calDragIt = function (ev){ var  cal = Calendar._C; if ( ! (cal && cal.dragging)){ return   false ;}; var  posX; var  posY; if (Calendar.is_ie){posY = window.event.clientY + document.body.scrollTop;posX = window.event.clientX + document.body.scrollLeft;} else {posX = ev.pageX;posY = ev.pageY;};cal.hideShowCovered(); var  st = cal.element.style;st.left = (posX - cal.xOffs) + " px " ;st.top = (posY - cal.yOffs) + " px " ;Calendar.stopEvent(ev);};Calendar.calDragEnd = function (ev){ var  cal = Calendar._C; if ( ! cal){ return   false ;};cal.dragging = false ; with (Calendar){removeEvent(document, " mousemove " ,calDragIt);removeEvent(document, " mouseover " ,stopEvent);removeEvent(document, " mouseup " ,calDragEnd);tableMouseUp(ev);};cal.hideShowCovered();};Calendar.dayMouseDown = function (ev){ var  el = Calendar.getElement(ev); if (el.disabled){ return   false ;}; var  cal = el.calendar;cal.activeDiv = el;Calendar._C = cal; if (el.navtype != 300 ) with (Calendar){addClass(el, " hilite active " );addEvent(document, " mouseover " ,tableMouseOver);addEvent(document, " mousemove " ,tableMouseOver);addEvent(document, " mouseup " ,tableMouseUp);} else   if (cal.isPopup){cal._dragStart(ev);};Calendar.stopEvent(ev); if (el.navtype ==- 1 || el.navtype == 1 ){cal.timeout = setTimeout( " Calendar.showMonthsCombo() " , 250 );} else   if (el.navtype ==- 2 || el.navtype == 2 ){cal.timeout = setTimeout((el.navtype > 0 ) ? " Calendar.showYearsCombo(true) " : " Calendar.showYearsCombo(false) " , 250 );} else {cal.timeout = null ;}};Calendar.dayMouseDblClick = function (ev){Calendar.cellClick(Calendar.getElement(ev)); if (Calendar.is_ie){ try {document.selection.empty();} catch (e){}}};Calendar.dayMouseOver = function (ev){ var  el = Calendar.getElement(ev); if (Calendar.isRelated(el,ev) || Calendar._C || el.disabled){ return   false ;}; if (el.ttip){ if (el.ttip.substr( 0 , 1 ) == " _ " ){ var  date = null ; with (el.calendar.date){date = new  Date(getFullYear(),getMonth(),el.caldate);};el.ttip = date.print(el.calendar.ttDateFormat) + el.ttip.substr( 1 );}}; if (el.navtype != 300 ){Calendar.addClass(el, " hilite " ); if (el.caldate){Calendar.addClass(el.parentNode, " rowhilite " );}};Calendar.stopEvent(ev);};Calendar.dayMouseOut = function (ev){ with (Calendar){ var  el = getElement(ev); if (isRelated(el,ev) || _C || el.disabled){ return   false ;};removeClass(el, " hilite " ); if (el.caldate){removeClass(el.parentNode, " rowhilite " );}}};Calendar.cellClick = function (el){ var  cal = el.calendar; var  closing = false ; var  newdate = false ; var  date = null ; if ( typeof  el.navtype == " undefined " ){Calendar.removeClass(cal.currentDateEl, " selected " );Calendar.addClass(el, " selected " );closing = (cal.currentDateEl == el); if ( ! closing){cal.currentDateEl = el;};cal.date.setDate(el.caldate);date = cal.date;newdate = true ;} else { if (el.navtype == 200 ){Calendar.removeClass(el, " hilite " );cal.callCloseHandler(); return ;};date = (el.navtype == 0 ) ? new  Date(): new  Date(cal.date); var  year = date.getFullYear(); var  mon = date.getMonth(); function  setMonth(m){ var  day = date.getDate(); var  max = date.getMonthDays(m); if (day > max){date.setDate(max);};date.setMonth(m);}; switch (el.navtype){ case   - 2 : if (year > cal.minYear){date.setFullYear(year - 1 );}; break ; case   - 1 : if (mon > 0 ){setMonth(mon - 1 );} else   if (year --> cal.minYear){date.setFullYear(year);setMonth( 11 );}; break ; case   1 : if (mon < 11 ){setMonth(mon + 1 );} else   if (year < cal.maxYear){date.setFullYear(year + 1 );setMonth( 0 );}; break ; case   2 : if (year < cal.maxYear){date.setFullYear(year + 1 );}; break ; case   100 :cal.setMondayFirst( ! cal.mondayFirst); return ;}; if ( ! date.equalsTo(cal.date)){cal.setDate(date);newdate = el.navtype == 0 ;}}; if (newdate){cal.callHandler();}; if (closing){Calendar.removeClass(el, " hilite " );cal.callCloseHandler();}};Calendar.prototype.create = function (_par){ var  parent = null ; if ( ! _par){parent = document.getElementsByTagName( " body " )[ 0 ]; this .isPopup = true ;} else {parent = _par; this .isPopup = false ;}; this .date = this .dateStr ? new  Date( this .dateStr): new  Date(); var  table = Calendar.createElement( " table " ); this .table = table;table.cellSpacing = 0 ;table.cellPadding = 0 ;table.calendar = this ;Calendar.addEvent(table, " mousedown " ,Calendar.tableMouseDown); var  div = Calendar.createElement( " div " ); this .element = div;div.className = " calendar " ; if ( this .isPopup){div.style.position = " absolute " ;div.style.display = " none " ;};div.appendChild(table); var  thead = Calendar.createElement( " thead " ,table); var  cell = null ; var  row = null ; var  cal = this ; var  hh = function (text,cs,navtype){cell = Calendar.createElement( " td " ,row);cell.colSpan = cs;cell.className = " button " ;Calendar._add_evs(cell);cell.calendar = cal;cell.navtype = navtype; if (text.substr( 0 , 1 ) != " & " ){cell.appendChild(document.createTextNode(text));} else {cell.innerHTML = text;}; return  cell;};row = Calendar.createElement( " tr " ,thead); var  title_length = 6 ;( this .isPopup) &&-- title_length;( this .weekNumbers) &&++ title_length;hh( " - " , 1 , 100 ).ttip = Calendar._TT[ " TOGGLE " ]; this .title = hh( "" ,title_length, 300 ); this .title.className = " title " ; if ( this .isPopup){ this .title.ttip = Calendar._TT[ " DRAG_TO_MOVE " ]; this .title.style.cursor = " move " ;hh( " &#x00d7; " , 1 , 200 ).ttip = Calendar._TT[ " CLOSE " ];};row = Calendar.createElement( " tr " ,thead);row.className = " headrow " ; this ._nav_py = hh( " &#x00ab; " , 1 , - 2 ); this ._nav_py.ttip = Calendar._TT[ " PREV_YEAR " ]; this ._nav_pm = hh( " &#x2039; " , 1 , - 1 ); this ._nav_pm.ttip = Calendar._TT[ " PREV_MONTH " ]; this ._nav_now = hh(Calendar._TT[ " TODAY " ], this .weekNumbers ? 4 : 3 , 0 ); this ._nav_now.ttip = Calendar._TT[ " GO_TODAY " ]; this ._nav_nm = hh( " &#x203a; " , 1 , 1 ); this ._nav_nm.ttip = Calendar._TT[ " NEXT_MONTH " ]; this ._nav_ny = hh( " &#x00bb; " , 1 , 2 ); this ._nav_ny.ttip = Calendar._TT[ " NEXT_YEAR " ];row = Calendar.createElement( " tr " ,thead);row.className = " daynames " ; if ( this .weekNumbers){cell = Calendar.createElement( " td " ,row);cell.className = " name wn " ;cell.appendChild(document.createTextNode(Calendar._TT[ " WK " ]));}; for ( var  i = 7 ;i > 0 ; -- i){cell = Calendar.createElement( " td " ,row);cell.appendChild(document.createTextNode( "" )); if ( ! i){cell.navtype = 100 ;cell.calendar = this ;Calendar._add_evs(cell);}}; this .firstdayname = ( this .weekNumbers) ? row.firstChild.nextSibling:row.firstChild; this ._displayWeekdays(); var  tbody = Calendar.createElement( " tbody " ,table); this .tbody = tbody; for (i = 6 ;i > 0 ; -- i){row = Calendar.createElement( " tr " ,tbody); if ( this .weekNumbers){cell = Calendar.createElement( " td " ,row);cell.appendChild(document.createTextNode( "" ));}; for ( var  j = 7 ;j > 0 ; -- j){cell = Calendar.createElement( " td " ,row);cell.appendChild(document.createTextNode( "" ));cell.calendar = this ;Calendar._add_evs(cell);}};div = Calendar.createElement( " div " , this .element); this .monthsCombo = div;div.className = " combo " ; for (i = 0 ;i < Calendar._MN.length; ++ i){ var  mn = Calendar.createElement( " div " );mn.className = " label " ;mn.month = i;mn.appendChild(document.createTextNode(Calendar._MN3[i]));div.appendChild(mn);};div = Calendar.createElement( " div " , this .element); this .yearsCombo = div;div.className = " combo " ; for (i = 12 ;i > 0 ; -- i){ var  yr = Calendar.createElement( " div " );yr.className = " label " ;yr.appendChild(document.createTextNode( "" ));div.appendChild(yr);}; this ._init( this .mondayFirst, this .date);parent.appendChild( this .element);};Calendar._keyEvent = function (ev){ if ( ! window.calendar){ return   false ;};(Calendar.is_ie) && (ev = window.event); var  cal = window.calendar; var  act = (Calendar.is_ie || ev.type == " keypress " ); if (ev.ctrlKey){ switch (ev.keyCode){ case   37 :act && Calendar.cellClick(cal._nav_pm); break ; case   38 :act && Calendar.cellClick(cal._nav_py); break ; case   39 :act && Calendar.cellClick(cal._nav_nm); break ; case   40 :act && Calendar.cellClick(cal._nav_ny); break ; default : return   false ;}} else   switch (ev.keyCode){ case   32 :Calendar.cellClick(cal._nav_now); break ; case   27 :act && cal.hide(); break ; case   37 : case   38 : case   39 : case   40 : if (act){ var  date = cal.date.getDate() - 1 ; var  el = cal.currentDateEl; var  ne = null ; var  prev = (ev.keyCode == 37 ) || (ev.keyCode == 38 ); switch (ev.keyCode){ case   37 :( -- date >= 0 ) && (ne = cal.ar_days[date]); break ; case   38 :date -= 7 ;(date >= 0 ) && (ne = cal.ar_days[date]); break ; case   39 :( ++ date < cal.ar_days.length) && (ne = cal.ar_days[date]); break ; case   40 :date += 7 ;(date < cal.ar_days.length) && (ne = cal.ar_days[date]); break ;}; if ( ! ne){ if (prev){Calendar.cellClick(cal._nav_pm);} else {Calendar.cellClick(cal._nav_nm);};date = (prev) ? cal.date.getMonthDays(): 1 ;el = cal.currentDateEl;ne = cal.ar_days[date - 1 ];};Calendar.removeClass(el, " selected " );Calendar.addClass(ne, " selected " );cal.date.setDate(ne.caldate);cal.currentDateEl = ne;}; break ; case   13 : if (act){cal.callHandler();cal.hide();}; break ; default : return   false ;};Calendar.stopEvent(ev);};Calendar.prototype._init = function (mondayFirst,date){ var  today = new  Date(); var  year = date.getFullYear(); if (year < this .minYear){year = this .minYear;date.setFullYear(year);} else   if (year > this .maxYear){year = this .maxYear;date.setFullYear(year);}; this .mondayFirst = mondayFirst; this .date = new  Date(date); var  month = date.getMonth(); var  mday = date.getDate(); var  no_days = date.getMonthDays();date.setDate( 1 ); var  wday = date.getDay(); var  MON = mondayFirst ? 1 : 0 ; var  SAT = mondayFirst ? 5 : 6 ; var  SUN = mondayFirst ? 6 : 0 ; if (mondayFirst){wday = (wday > 0 ) ? (wday - 1 ): 6 ;}; var  iday = 1 ; var  row = this .tbody.firstChild; var  MN = Calendar._MN3[month]; var  hasToday = ((today.getFullYear() == year) && (today.getMonth() == month)); var  todayDate = today.getDate(); var  week_number = date.getWeekNumber(); var  ar_days = new  Array(); for ( var  i = 0 ;i < 6 ; ++ i){ if (iday > no_days){row.className = " emptyrow " ;row = row.nextSibling; continue ;}; var  cell = row.firstChild; if ( this .weekNumbers){cell.className = " day wn " ;cell.firstChild.data = week_number;cell = cell.nextSibling;}; ++ week_number;row.className = " daysrow " ; for ( var  j = 0 ;j < 7 ; ++ j){cell.className = " day " ; if (( ! i && j < wday) || iday > no_days){cell.innerHTML = " &nbsp; " ;cell.disabled = true ;cell = cell.nextSibling; continue ;};cell.disabled = false ;cell.firstChild.data = iday; if ( typeof   this .checkDisabled == " function " ){date.setDate(iday); if ( this .checkDisabled(date)){cell.className += "  disabled " ;cell.disabled = true ;}}; if ( ! cell.disabled){ar_days[ar_days.length] = cell;cell.caldate = iday;cell.ttip = " _ " ; if (iday == mday){cell.className += "  selected " ; this .currentDateEl = cell;}; if (hasToday && (iday == todayDate)){cell.className += "  today " ;cell.ttip += Calendar._TT[ " PART_TODAY " ];}; if (wday == SAT || wday == SUN){cell.className += "  weekend " ;}}; ++ iday;(( ++ wday) ^ 7 ) || (wday = 0 );cell = cell.nextSibling;};row = row.nextSibling;}; this .ar_days = ar_days; this .title.firstChild.data = Calendar._MN[month] + " " + year;};Calendar.prototype.setDate = function (date){ if ( ! date.equalsTo( this .date)){ this ._init( this .mondayFirst,date);}};Calendar.prototype.setMondayFirst = function (mondayFirst){ this ._init(mondayFirst, this .date); this ._displayWeekdays();};Calendar.prototype.setDisabledHandler = function (unaryFunction){ this .checkDisabled = unaryFunction;};Calendar.prototype.setRange = function (a,z){ this .minYear = a; this .maxYear = z;};Calendar.prototype.callHandler = function (){ if ( this .onSelected){ this .onSelected( this , this .date.print( this .dateFormat));}};Calendar.prototype.callCloseHandler = function (){ if ( this .onClose){ this .onClose( this );}; this .hideShowCovered();};Calendar.prototype.destroy = function (){ var  el = this .element.parentNode;el.removeChild( this .element);Calendar._C = null ; delete  el;};Calendar.prototype.reparent = function (new_parent){ var  el = this .element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar = function (ev){ if ( ! window.calendar){ return   false ;}; var  el = Calendar.is_ie ? Calendar.getElement(ev):Calendar.getTargetElement(ev); for (;el != null && el != calendar.element;el = el.parentNode); if (el == null ){window.calendar.callCloseHandler();Calendar.stopEvent(ev);}};Calendar.prototype.show = function (){ var  rows = this .table.getElementsByTagName( " tr " ); for ( var  i = rows.length;i > 0 ;){ var  row = rows[ -- i];Calendar.removeClass(row, " rowhilite " ); var  cells = row.getElementsByTagName( " td " ); for ( var  j = cells.length;j > 0 ;){ var  cell = cells[ -- j];Calendar.removeClass(cell, " hilite " );Calendar.removeClass(cell, " active " );}}; this .element.style.display = " block " ; this .hidden = false ; if ( this .isPopup){window.calendar = this ;Calendar.addEvent(document, " keydown " ,Calendar._keyEvent);Calendar.addEvent(document, " keypress " ,Calendar._keyEvent);Calendar.addEvent(document, " mousedown " ,Calendar._checkCalendar);}; this .hideShowCovered();};Calendar.prototype.hide = function (){ if ( this .isPopup){Calendar.removeEvent(document, " keydown " ,Calendar._keyEvent);Calendar.removeEvent(document, " keypress " ,Calendar._keyEvent);Calendar.removeEvent(document, " mousedown " ,Calendar._checkCalendar);}; this .element.style.display = " none " ; this .hidden = true ; this .hideShowCovered();};Calendar.prototype.showAt = function (x,y){ var  s = this .element.style;s.left = x + " px " ;s.top = y + " px " ; this .show();};Calendar.prototype.showAtElement = function (el){ var  p = Calendar.getAbsolutePos(el); this .showAt(p.x,p.y + el.offsetHeight);};Calendar.prototype.setDateFormat = function (str){ this .dateFormat = str;};Calendar.prototype.setTtDateFormat = function (str){ this .ttDateFormat = str;};Calendar.prototype.parseDate = function (str,fmt){ var  y = 0 ; var  m =- 1 ; var  d = 0 ; var  a = str.split( / W +/ ); if ( ! fmt){fmt = this .dateFormat;}; var  b = fmt.split( / W +/ ); var  i = 0 ,j = 0 ; for (i = 0 ;i < a.length; ++ i){ if (b[i] == " D " || b[i] == " DD " ){ continue ;}; if (b[i] == " d " || b[i] == " dd " ){d = parseInt(a[i], 10 );}; if (b[i] == " m " || b[i] == " mm " ){m = parseInt(a[i], 10 ) - 1 ;}; if (b[i] == " y " ){y = parseInt(a[i], 10 );}; if (b[i] == " yy " ){y = parseInt(a[i], 10 ) + 1900 ;}; if (b[i] == " M " || b[i] == " MM " ){ for (j = 0 ;j < 12 ; ++ j){ if (Calendar._MN[j].substr( 0 ,a[i].length).toLowerCase() == a[i].toLowerCase()){m = j; break ;}}}}; if (y != 0 && m !=- 1 && d != 0 ){ this .setDate( new  Date(y,m,d)); return ;};y = 0 ;m =- 1 ;d = 0 ; for (i = 0 ;i < a.length; ++ i){ if (a[i].search( / [a - zA - Z] +/ ) !=- 1 ){ var  t =- 1 ; for (j = 0 ;j < 12 ; ++ j){ if (Calendar._MN[j].substr( 0 ,a[i].length).toLowerCase() == a[i].toLowerCase()){t = j; break ;}}; if (t !=- 1 ){ if (m !=- 1 ){d = m + 1 ;};m = t;}} else   if (parseInt(a[i], 10 ) <= 12 && m ==- 1 ){m = a[i] - 1 ;} else   if (parseInt(a[i], 10 ) > 31 && y == 0 ){y = a[i];} else   if (d == 0 ){d = a[i];}}; if (y == 0 ){ var  today = new  Date();y = today.getFullYear();}; if (m !=- 1 && d != 0 ){ this .setDate( new  Date(y,m,d));}};Calendar.prototype.hideShowCovered = function (){ var  tags = new  Array( " applet " , " iframe " , " select " ); var  el = this .element; var  p = Calendar.getAbsolutePos(el); var  EX1 = p.x; var  EX2 = el.offsetWidth + EX1; var  EY1 = p.y; var  EY2 = el.offsetHeight + EY1; for ( var  k = tags.length;k > 0 ;){ var  ar = document.getElementsByTagName(tags[ -- k]); var  cc = null ; for ( var  i = ar.length;i > 0 ;){cc = ar[ -- i];p = Calendar.getAbsolutePos(cc); var  CX1 = p.x; var  CX2 = cc.offsetWidth + CX1; var  CY1 = p.y; var  CY2 = cc.offsetHeight + CY1; if ( this .hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)){cc.style.visibility = " visible " ;} else {cc.style.visibility = " hidden " ;}}}};Calendar.prototype._displayWeekdays = function (){ var  MON = this .mondayFirst ? 0 : 1 ; var  SUN = this .mondayFirst ? 6 : 0 ; var  SAT = this .mondayFirst ? 5 : 6 ; var  cell = this .firstdayname; for ( var  i = 0 ;i < 7 ; ++ i){cell.className = " day name " ; if ( ! i){cell.ttip = this .mondayFirst ? Calendar._TT[ " SUN_FIRST " ]:Calendar._TT[ " MON_FIRST " ];cell.navtype = 100 ;cell.calendar = this ;Calendar._add_evs(cell);}; if (i == SUN || i == SAT){Calendar.addClass(cell, " weekend " );};cell.firstChild.data = Calendar._DN3[i + 1 - MON];cell = cell.nextSibling;}};Calendar.prototype._hideCombos = function (){ this .monthsCombo.style.display = " none " ; this .yearsCombo.style.display = " none " ;};Calendar.prototype._dragStart = function (ev){ if ( this .dragging){ return ;}; this .dragging = true ; var  posX; var  posY; if (Calendar.is_ie){posY = window.event.clientY + document.body.scrollTop;posX = window.event.clientX + document.body.scrollLeft;} else {posY = ev.clientY + window.scrollY;posX = ev.clientX + window.scrollX;}; var  st = this .element.style; this .xOffs = posX - parseInt(st.left); this .yOffs = posY - parseInt(st.top); with (Calendar){addEvent(document, " mousemove " ,calDragIt);addEvent(document, " mouseover " ,stopEvent);addEvent(document, " mouseup " ,calDragEnd);}};Date._MD = new  Array( 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 );Date.SECOND = 1000 ;Date.MINUTE = 60 * Date.SECOND;Date.HOUR = 60 * Date.MINUTE;Date.DAY = 24 * Date.HOUR;Date.WEEK = 7 * Date.DAY;Date.prototype.getMonthDays = function (month){ var  year = this .getFullYear(); if ( typeof  month == " undefined " ){month = this .getMonth();}; if ((( 0 == (year % 4 )) && (( 0 != (year % 100 )) || ( 0 == (year % 400 )))) && month == 1 ){ return   29 ;} else { return  Date._MD[month];}};Date.prototype.getWeekNumber = function (){ var  now = new  Date( this .getFullYear(), this .getMonth(), this .getDate(), 0 , 0 , 0 ); var  then = new  Date( this .getFullYear(), 0 , 1 , 0 , 0 , 0 ); var  time = now - then; var  day = then.getDay();(day > 3 ) && (day -= 4 ) || (day += 3 ); return  Math.round(((time /  Date.DAY) +  day) /   7 );};Date.prototype.equalsTo = function (date){ return (( this .getFullYear() == date.getFullYear()) && ( this .getMonth() == date.getMonth()) && ( this .getDate() == date.getDate()));};Date.prototype.print = function (frm){ var  str = new  String(frm); var  m = this .getMonth(); var  d = this .getDate(); var  y = this .getFullYear(); var  wn = this .getWeekNumber(); var  w = this .getDay(); var  s = new  Array();s[ " d " ] = d;s[ " dd " ] = (d < 10 ) ? ( " 0 " + d):d;s[ " m " ] = 1 + m;s[ " mm " ] = (m < 9 ) ? ( " 0 " + ( 1 + m)):( 1 + m);s[ " y " ] = y;s[ " yy " ] = new  String(y).substr( 2 , 2 );s[ " w " ] = wn;s[ " ww " ] = (wn < 10 ) ? ( " 0 " + wn):wn; with (Calendar){s[ " D " ] = _DN3[w];s[ " DD " ] = _DN[w];s[ " M " ] = _MN3[m];s[ " MM " ] = _MN[m];}; var  re =/ (. * )(W |^ )(d | dd | m | mm | y | yy | MM | M | DD | D | w | ww)(W | $)(. * ) / ; while (re.exec(str) != null ){str = RegExp.$ 1 + RegExp.$ 2 + s[RegExp.$ 3 ] + RegExp.$ 4 + RegExp.$ 5 ;}; return  str;};window.calendar = null ;


 

calendar-cn.js

//  ** I18N
Calendar._DN  =   new  Array
(
" " ,
 
" " ,
 
" " ,
 
" " ,
 
" " ,
 
" " ,
 
" " ,
 
" " );
Calendar._MN 
=   new  Array
(
" 1 月 " ,
 
" 2 月 " ,
 
" 3 月 " ,
 
" 4 月 " ,
 
" 5 月 " ,
 
" 6 月 " ,
 
" 7 月 " ,
 
" 8 月 " ,
 
" 9 月 " ,
 
" 10月 " ,
 
" 11月 " ,
 
" 12月 " );

//  tooltips
Calendar._TT  =  {};
Calendar._TT[
" TOGGLE " =   " 星期一开始 " ;
Calendar._TT[
" PREV_YEAR " =   " 上一年 " ;
Calendar._TT[
" PREV_MONTH " =   " 上一月 " ;
Calendar._TT[
" GO_TODAY " =   " 当前日期 " ;
Calendar._TT[
" NEXT_MONTH " =   " 下一月 " ;
Calendar._TT[
" NEXT_YEAR " =   " 下一年 " ;
Calendar._TT[
" SEL_DATE " =   " 日程备忘 " ;
Calendar._TT[
" DRAG_TO_MOVE " =   " 拖动 " ;
Calendar._TT[
" PART_TODAY " =   "  (今日) " ;
Calendar._TT[
" MON_FIRST " =   " 第一个星期一 " ;
Calendar._TT[
" SUN_FIRST " =   " 第一个星期日 " ;
Calendar._TT[
" CLOSE " =   " 关闭 " ;
Calendar._TT[
" TODAY " =   " 今日 " ;

//  date formats
Calendar._TT[ " DEF_DATE_FORMAT " =   " y-mm-dd " ;
Calendar._TT[
" TT_DATE_FORMAT " =   "  M d日, 星期D " ;

Calendar._TT[
" WK " =   " wk " ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值