最近做一个项目的时候需要用到日期选择功能,本以为asp.net会有的,结果发现只有在winform下才可以使用这个datetimePicker,web下并没有提供这个功能。于是Google,网上有很多大牛用不同的方法解决了这个问题,其中有一个是出现率最高的,主要使用js实现,洋洋洒洒近300行的代码,自己实在看不懂,但是只要好用就好了,转载如下。
calendar.js
//日期选择 var gdCtrl = new Object(); var goSelectTag = new Array(); var gcGray = "#e8e8ea"; var gcToggle = "#ffff00"; var gcBG = "#FFFFFF"; var gcBorder = "#000000" var gcFont = "#000000" var BgColor = "#FFFFFF"; var previousObject = null; var targert; var noOtherMonth = 1; var gdCurDate = new Date(); var giYear = gdCurDate.getFullYear(); var giMonth = gdCurDate.getMonth() + 1; var giDay = gdCurDate.getDate(); var gCalMode = ""; var gCalDefDate = ""; var CAL_MODE_NOBLANK = "2"; function fSetDate(iYear, iMonth, iDay) { //VicPopCal.style.visibility = "hidden"; if ((iYear == 0) && (iMonth == 0) && (iDay == 0)) { gdCtrl.value = ""; } else { iMonth = iMonth + 100 + ""; iMonth = iMonth.substring(1); iDay = iDay + 100 + ""; iDay = iDay.substring(1); gdCtrl.value = iYear + "-" + iMonth + "-" + iDay; } for (i in goSelectTag) goSelectTag[i].style.visibility = "visible"; goSelectTag.length = 0; window.returnValue = gdCtrl.value; target.value = gdCtrl.value; window.close(); } function HiddenDiv() { var i; VicPopCal.style.visibility = "hidden"; for (i in goSelectTag) goSelectTag[i].style.visibility = "visible"; goSelectTag.length = 0; } function fSetSelected(aCell) { var iOffset = 0; var iYear = parseInt(tbSelYear.value); var iMonth = parseInt(tbSelMonth.value); aCell.bgColor = gcBG; with (aCell.children["cellText"]) { var iDay = parseInt(innerText); if (color == gcGray) { if (noOtherMonth != 1) { iOffset = (Victor < 10) ? -1 : 1; iOffset = (iDay < 15) ? 1 : -1; } else { return 1; } } iMonth += iOffset; if (iMonth < 1) { iYear--; iMonth = 12; } else if (iMonth > 12) { iYear++; iMonth = 1; } } fSetDate(iYear, iMonth, iDay); } function Point(iX, iY) { this.x = iX; this.y = iY; } function fBuildCal(iYear, iMonth) { var aMonth = new Array(); for (i = 1; i < 7; i++) aMonth[i] = new Array(i); var dCalDate = new Date(iYear, iMonth - 1, 1); var iDayOfFirst = dCalDate.getDay(); var iDaysInMonth = new Date(iYear, iMonth, 0).getDate(); var iOffsetLast = new Date(iYear, iMonth - 1, 0).getDate() - iDayOfFirst + 1; var iDate = 1; var iNext = 1; for (d = 0; d < 7; d++) aMonth[1][d] = (d < iDayOfFirst) ? -(iOffsetLast + d) : iDate++; for (w = 2; w < 7; w++) for (d = 0; d < 7; d++) aMonth[w][d] = (iDate <= iDaysInMonth) ? iDate++ : -(iNext++); return aMonth; } function fDrawCal(iYear, iMonth, iCellHeight, sDateTextSize) { var WeekDay = new Array("日", "一", "二", "三", "四", "五", "六"); var styleTD = " bgcolor='" + gcBG + "' bordercolor='" + gcBorder + "' valign='middle' align='center' height='20' style='font-size:12px; "; var styleTD2 = "valign='middle' align='center' height='" + iCellHeight + "' style='font-size:12px; "; with (document) { write("
"); write(" "); write(" "); write(" "); write(" | "); write("||
"); write(" | "); write("||
"); write("
|
Calendar.htm
新建一个web.aspx,使用方法如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="web.aspx.cs" Inherits="ASP.net.web" %>
效果如下: