📄 date.js
字号:
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'> </td>";
}
else
{
s += "<td onclick='" + sOnClick + "' align='center' width='22' d='" + iValue + "' nav='1' onmouseover='this.runtimeStyle.color = \"#e89f2e\";' onmouseout='this.runtimeStyle.color = \"\";'><</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'> </td>";
}
else
{
s += "<td onclick='" + sOnClick + "' align='center' width='22' d='" + iValue + "' nav='1' onmouseover='this.runtimeStyle.color = \"#e89f2e\";' onmouseout='this.runtimeStyle.color = \"\";'>></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'> </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'> </td>";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -