⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 date.js

📁 民航订票管理系统
💻 JS
📖 第 1 页 / 共 2 页
字号:
var ORG_DATE_FORMAT = 11;
var ORG_DATE_SEPARATOR = '-';
var ORG_DATE_START_DAY = 0;
var ORG_SHOW_WEEK_NUMBER = '0';

var _oCalPopUp;
var _oCalInput;

var _sDateFormats	= new Array
						(
							"M/d/yy",
							"M/d/yyyy",
							"MM/dd/yy",
							"MM/dd/yyyy",
							"d/M/yy",
							"d/M/yyyy",
							"dd/MM/yy",
							"dd/MM/yyyy",
							"yy/M/d",
							"yyyy/M/d",
							"yy/MM/dd",
							"yyyy/MM/dd"
						);

var _sCalLongMonths	=	new	Array
						(
							'一月', 
							'二月', 
							'三月', 
							'四月', 
							'五月', 
							'六月',
							'七月', 
                            '八月', 
                            '九月', 
                            '十月', 
                            '十一月', 
                            '十二月'
						);

var _sCalDays		=	new Array
						(
							'日',
							'一',
							'二',
							'三',
							'四',
							'五',
							'六'
						);

var _iCalStartDay	= ORG_DATE_START_DAY;
var _dCalMinDate	= new Date(1800, 4, 1);
var _dCalMaxDate	= new Date(2100, 11, 31);
var _sCalSeperator	= ORG_DATE_SEPARATOR;
var _iCalFormat		= ORG_DATE_FORMAT;
var _sShowWeekNumbers = ORG_SHOW_WEEK_NUMBER;

var iShowWeekCalWidth = 170;
var iNoWeekCalWidth   = 150;
var iCalHeight        = 144;
var ERR_MESSAGE       = "请输入正确的日期。";


function InitCalendar (iDateFormat, sSeperator, iStartDay, dMinDate, dMaxDate)
{
	_iCalFormat = iDateFormat;
	
	if (sSeperator)
	{
		_sCalSeperator = sSeperator;
	
		if (iStartDay)
		{
			_iCalStartDay = iStartDay;
			
			if (dMinDate)
			{
				_dCalMinDate = dMinDate;
				
				if (dMaxDate)
				{
					_dCalMaxDate = dMaxDate;
				}
			}
		}
	}
}


function LaunchCalendar(oInputElem, dInitDate)
{
    if (oInputElem.readOnly) return;

	dInitDate = StringToDate(dInitDate);

	_oCalInput = oInputElem;

	_oCalPopUp = window.createPopup();

	_oCalPopUp.document.body.innerHTML = DrawMonth(dInitDate, "parent.ReturnDate(this);", HILITE_NONE, null );

	var iCalWidth = _sShowWeekNumbers == "1" ? iShowWeekCalWidth : iNoWeekCalWidth;
		
	_oCalPopUp.show(-1, 19, iCalWidth, iCalHeight, oInputElem);
}

//
// Returns true if the return value is set to a valid date
// false otherwise.
//
function SetDateValues(oInput)
{
	oInput.value = Trim(oInput.value);

	var s = oInput.value;
	
	if (s.length > 0)
	{
		var D = ParseDate(s, _iCalFormat);
		
		if (D)
		{
			oInput.value		= FormatDate(D);
			oInput.returnValue	= FormatUtcDate(D);
			return true;
		}
		else
		{
			oInput.select();
			return false;
		}
	}
	else
	{
		oInput.returnValue = "";
		return true;
	}
}


function GetFirstDayInCalendar(D)
{
	D.setDate(1);

	var i = D.getDay() - _iCalStartDay;

	if (i < 0)
	{
		i += 7;
	}

	if (i == 0)
	{
		return D;
	}

	D.setDate((i * -1) + 1);
	
	D.setHours(0);
	D.setMinutes(0);
	D.setSeconds(0);

	return D;
}

var HILITE_NONE = 0;
var HILITE_DAY = 1;
var HILITE_WEEK = 2;

///
/// Renders the control to display a month using the given day
///
/// D        - day around which the month should be rendered
/// sOnClick - function to fire when a date is clicked
/// hiliteCode - rules for hiliting the dates around the given day
///            - HILITE_NONE - no 'range' is hilited
///            - The day represented by 'hiliteDay' is hilited
///            - The week that contains 'hiliteDay' is hilited
/// hiliteDay  - The day to hilite
function DrawMonth(D, sOnClick, hiliteCode, hiliteDay )
{ 
	// Determine hiliting range
	var dHiliteStart = null;
	var dHiliteEnd   = null;
	
	switch( hiliteCode )
		{
		case HILITE_DAY:
			dHiliteStart = new Date( hiliteDay );
			dHiliteEnd   = new Date( hiliteDay );
			break;
			
		case HILITE_WEEK:
			dHiliteStart = new GetFirstDayOfWeek( hiliteDay );   
			dHiliteEnd   = new GetLastDayOfWeek( hiliteDay ); 
			break;
			
		default:
			// Do nothing-- rather than let the user get an error, emulate HILITE_NONE.
			break;
	}
	
	// We are stuck with a full DateTime even though we only want to
	// check at the date level.  So, adjust the hilite start/end times
	// to be at the start/end of the days, respectively.  Otherwise
	// our date comparisons won't work.
	if( dHiliteStart != null )
	{
		dHiliteStart.setMilliseconds( 0 );
		dHiliteStart.setSeconds( 0 );
		dHiliteStart.setMinutes( 0 );
		dHiliteStart.setHours( 0 );
	}
	if( dHiliteEnd != null )
	{
		dHiliteEnd.setMilliseconds( 999 );
		dHiliteEnd.setSeconds( 59 );
		dHiliteEnd.setMinutes( 59 );
		dHiliteEnd.setHours( 23 );
	}
	
	var tmpDate = new Date( D );
	tmpDate.setHours(0,0,0,0);
	
	var dToday		= new Date();
	
	dToday.setHours(0,0,0,0);
	
	var iToday		= dToday.valueOf();
	
	var dInitDate	= new Date(tmpDate.valueOf());
	var iInitMonth	= dInitDate.getMonth();

	tmpDate = GetFirstDayInCalendar(tmpDate);

	// write out the top navigation
	//
	var s = "<table cellpadding='0' cellspacing='0' style='border-collapse: collapse;table-layout:fixed'><tr><td style='text-align:center;border:1px solid #7b9ebd;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#cecfde);' colspan='";
	if( _sShowWeekNumbers == "1" )
	{
		// 7 days + 1 week number = 8 columns
		s += "8";
	}
	else
	{
		s += "7";
	}
	
	s+= "'><table cellpadding='0' cellspacing='0' style='table-layout:fixed'><tr height='20' vAlign='middle' style='font-family:Tahoma;font-size:8pt;cursor:hand;'>";

	var iValue = dInitDate.valueOf();

	// previous month navigation
	//
	if (tmpDate < _dCalMinDate)
	{
		s += "<td onclick='" + sOnClick + "' align='center' width='22' style='cursor: default;' nav='0'>&nbsp;</td>";
	}
	else
	{
		s += "<td onclick='" + sOnClick + "' align='center' width='22' d='" + iValue + "' nav='1' onmouseover='this.runtimeStyle.color = \"#e89f2e\";' onmouseout='this.runtimeStyle.color = \"\";'>&lt;</td>";
	}

	// year navigation
	//
	s += "<td onclick='" + sOnClick + "' align='center' width='104'  d='" + iValue + "' nav='2' onmouseover='this.runtimeStyle.color = \"#e89f2e\";' onmouseout='this.runtimeStyle.color = \"\";'>" + _sCalLongMonths[iInitMonth] + " " + dInitDate.getFullYear() + "</td>";

	// next month navigation
	//
	var dLastDay = new Date(tmpDate.valueOf());

	dLastDay.setDate(dLastDay.getDate() + 42);

	if (dLastDay > _dCalMaxDate)
	{
		s += "<td onclick='" + sOnClick + "' align='center' width='22' style='cursor: default;' nav='0'>&nbsp;</td>";
	}
	else
	{
		s += "<td onclick='" + sOnClick + "' align='center' width='22' d='" + iValue + "' nav='1' onmouseover='this.runtimeStyle.color = \"#e89f2e\";' onmouseout='this.runtimeStyle.color = \"\";'>&gt;</td>";
	}

	s += "</tr></table></td></tr>";

	// write out the days of the week
	//
	s += "<tr>";

	var i	= 0;
	var ii	= _iCalStartDay;;

	if( _sShowWeekNumbers == "1" )
	{
		// Blank out area above week numbers
		s += "<td style='font-family:Tahoma;font-size:8pt;background-color:#eeeeee;text-align:center;border:1px solid #7b9ebd;width:20px;height:18px;cursor:default;' vAlign='middle' nav='0'></td>";
	}
	while (i < 7)
	{
		s += "<td style='font-family:Tahoma;font-size:8pt;background-color:#eeeeee;text-align:center;border:1px solid #7b9ebd;width:20px;height:20px;cursor:default;' vAlign='middle' nav='0'>" + _sCalDays[ii] + "</td>";
		
		i++;
		ii++;

		if (ii > 6)
		{
			ii = 0
		}
	}

	s += "</tr>";

	// write out the main body of the calendar
	//
	var iDate	= 0;
	var sStyle	= "";

	for (i = 0; i < 6; i++)
	{
		s += "<tr onmouseover='if(event.srcElement.noHl!=1){event.srcElement.runtimeStyle.color = \"#e89f2e\";}' onmouseout='if(event.srcElement.noHl!=1){event.srcElement.runtimeStyle.color = \"\";}'>";

		if( _sShowWeekNumbers == "1" )
		{
			// Write out week numbers; addition is to use the last day of the week to create the week number from, which is what outlook does.
			// Otherwise Jan 1 is frequently 'week 53'
			var iWeekNumber = getWeekNumber( GetLastDayOfWeek( tmpDate ) );
			s += "<td noHl='1' style='cursor:default;font-family:Tahoma;font-size:8pt;color:#0000ff;text-align:center;background-color:#eeeeee;border:1px solid #7288ac;width:20px;'>" + iWeekNumber + "</td>";
		}
		
		for(ii = 0; ii < 7; ii++)
		{
			iDate	= tmpDate.getDate();
			iValue	= tmpDate.valueOf();

			sStyle = "font-family:Tahoma;font-size:8pt;text-align:center;border:1px solid #7288ac;width:20px;";
			
			if (iValue == iToday)
			{
				sStyle += "border:2px solid #e89f2e;";
			}
			
			var dayIsInThisMonth = ( tmpDate.getMonth() == iInitMonth );
			
			// Hilite the selected week if appropriate
			if( ( hiliteCode == HILITE_DAY || hiliteCode == HILITE_WEEK ) &&
  	            ( tmpDate.getTime( ) >= dHiliteStart.getTime( ) ) &&  ( tmpDate.getTime( ) <= dHiliteEnd.getTime( ) ) )
			{
				sStyle += "background-color:#cccccc;";
				
				// Ensure proper contrast so we can see the numbering.
				if( !dayIsInThisMonth )
				{
					sStyle += "color:#ffffff;";
				}
			}
			else
			{
				if( !dayIsInThisMonth )
				{
					sStyle += "color:#cccccc;";
				}
			}

			if (tmpDate < _dCalMinDate || tmpDate > _dCalMaxDate)
			{
				s += "<td style='cursor:default;" + sStyle + "' nav='0'>&nbsp;</td>";
			}
			else if (tmpDate.getMonth() != iInitMonth)
			{
				s += "<td onclick='" + sOnClick + "' style='cursor:hand;" + sStyle + "' d='" + iValue + "'>" + iDate + "</td>";
			}
			else
			{
				s += "<td onclick='" + sOnClick + "' style='cursor:hand;" + sStyle + "' d='" + iValue + "'>" + iDate + "</td>";
			}

			tmpDate.setDate(iDate + 1);
		}

		s += "</tr>";
	}

	s += "</table>";

	return s; 
}

// Returns the week number the date falls on
// oDate - A Date Object with any given date to calculate a week number for.
function getWeekNumber( oDate )
{
	// Get the beginning of the year.
	var oYearStart = new Date( oDate.valueOf( ) );
	oYearStart.setMonth( 0, 1 );  // January is month 0
	oYearStart.setHours( 0, 0, 0, 0 );
	
	var iMSSinceYearStart = oDate.valueOf( ) - oYearStart.valueOf( );
	
	var fWeeksSinceYearStart = iMSSinceYearStart / 604800000;  // 1000 / 60 / 60 / 24 / 7;
	
	// Drop the extra decimal digits to make a whole number.
	var iWeeksSinceYearStart = Math.ceil( fWeeksSinceYearStart );
	
	if( iWeeksSinceYearStart == 0 )
	{
		// Deal with case where Jan 1 is on a Monday; this formula will produce 0 because jan 1 - jan 1 = 0.
		iWeeksSinceYearStart = 53;
	}
	
	return iWeeksSinceYearStart;
}


function DrawYear(D, sOnClick)
{
	var tmpDate = new Date( D );
	tmpDate.setMonth(0);
	tmpDate.setDate(1);
	
	// write out the top navigation
	//
	var s = "<table cellpadding='0' cellspacing='0' width='";
	s += _sShowWeekNumbers == "1" ? iShowWeekCalWidth : iNoWeekCalWidth;
	s += "' style='border-collapse:collapse;table-layout:fixed'><tr><td style='font-family:Tahoma;font-size:8pt;text-align:center;border:1px solid #7b9ebd;height:18px;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#cecfde);' colspan='3'><table cellpadding='0' cellspacing='0' style='table-layout:fixed'><tr height='18' style='font-family:Tahoma;font-size:8pt;cursor:hand;'>";

	var iValue	= tmpDate.valueOf();
	var iYear	= tmpDate.getFullYear();

	// previous year navigation
	//
	if (iYear <= _dCalMinDate.getFullYear())
		s += "<td align='center' width='22' style='cursor:default;' nav='0'>&nbsp;</td>";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -