DTPicker2.js
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:16k
源码类别:

OA系统

开发平台:

Java

  1. var _g_dt2_imgCBB = "images/cbb_drop.gif";
  2. var _g_dt2_imgCurDay = "images/curDayTip.gif";
  3. var _g_dt2_imgSelDay = "images/selDayBg.gif";
  4. var _g_dt2_ShowingDTPicker = null;
  5. var _g_dt2_theMonths = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
  6. var _g_dt2_theWeeks = new Array("日", "一", "二", "三", "四", "五", "六");
  7. var _g_dt2_days = new Array(42);
  8. function DateControl20(ctn) {
  9. _dt2_drawDTPicker(ctn); 
  10. }
  11. function _dt2_drawDTPicker(ctn) {
  12. if ( document.all("div_dtTable_" + ctn) == null )
  13. {
  14. document.body.insertAdjacentHTML("BeforeEnd", "<div id='div_dtTable_" + ctn + "' style='position:absolute; visibility:hidden; left:0;  top:22; z-index:2;'></div>");
  15. }
  16. _dt2_showDTTable(ctn);
  17. }
  18. function _dt2_drawDTTable(ctn) {
  19. var strHTML;
  20. if( document.all(ctn).value == "" ) {
  21. var now = new Date();
  22. var year = now.getYear();
  23. var month = now.getMonth()+1;
  24. var day = now.getDate();
  25. if(month<10) 
  26.    var smonth="0"+month
  27. else
  28.    var smonth=month
  29. if(day<10) 
  30.    var sday="0"+day
  31. else
  32.    var sday=day
  33.       
  34. document.all(ctn).value =year+"-"+smonth+"-"+sday
  35. }else {
  36. var year = _dt2_getDTYear(ctn);
  37. var month = _dt2_getDTMonth(ctn);
  38. var day = _dt2_getDTDay(ctn);
  39. }
  40. var i = 0;
  41. document.all("div_dtTable_" + ctn).innerHTML = "<iframe scr='' name='_dt2_iframe_" + ctn + "' width='200' height='140' border=0 NORESIZE=NORESIZE SCROLLING=no MARGINWIDTH=0 MARGINHEIGHT=0 FRAMESPACING=0 FRAMEBORDER=0></iframe>";
  42. strHTML = "<html><head></head><body leftmargin=0 topmargin=0 style='font-size:9pt; font-family:宋体; border-width:1px; border-style:solid; border-color:#000000'><table border='0' width='100%' height='100%' cellpadding='0' cellspacing='0' style='font-size:9pt;' bgcolor='#ffffff'>";
  43. strHTML += "<tr>";
  44. strHTML += "<td valign='top'>";
  45. strHTML += "<table border='0' width='100%' height='25' cellpadding='0' cellspacing='0' bgcolor='#004080'> ";
  46. //draw year and month
  47. strHTML += "<tr align='right'><td width=3></td><td align='left' style='font-size:9pt'><input type='button' style='height:18px; width:24px;font-size:9pt' value='《 ' onclick="javascript:window.parent._dt2_subMonth('" + ctn + "');"></td>";
  48. strHTML += "<td style='font-size:9pt; color:#ffffff;'><input id='dt2_input_year_" + ctn + "' type='text' size='4' key='false' minLength='0' maxLength='4' value='" + year + "' style='font-size:9pt;text-align:right; width:32px; border-left: #000000 solid 1; border-right: #000000 solid 1; border-top: #000000 solid 1; border-bottom: #000000 solid 1;' onblur="javascript:window.parent._dt2_onYearChange('" + ctn + "');"></td>";
  49. strHTML += "<td align='left' width='20'><input type='button' value='▲' onClick="window.parent._dt2_addYear('" + ctn + "')" style='height:10;width:17;font-size:4pt'><br><input type='button' value='▼' onClick="window.parent._dt2_subYear('" + ctn + "')" style='height:10;width:17;font-size:4pt'>";
  50. strHTML += "<td align='center'><select id='dt2_cbb_month_" + ctn + "' onchange="javascript:window.parent._dt2_onMonthChange('" + ctn + "');" style='width:60px; font-size:9pt'>";
  51. for ( i = 0; i < 12; i ++ ) {
  52. strHTML += "<option value='" + (i+1) + "'";
  53. if ( i+1 == month )
  54. strHTML += " selected";
  55. strHTML +=">" + _g_dt2_theMonths[i] + "</option>";
  56. }
  57. strHTML += "</select></td><td style='font-size:9pt'><input type='button'  style='height:18px; width:24px;font-size:9pt' value=' 》' onclick="javascript:window.parent._dt2_addMonth('" + ctn + "');">&nbsp;</td><td align='right'><input type='button'  style='height:18px; width:18px;font-size:7pt' onclick='javascript:window.parent._dt2_closeDTTable("" + ctn + "");' value='X' title='关闭'></td><td width=2></td></tr>";
  58. strHTML += "</table></td></tr><tr><td>";
  59. //draw weeks
  60. strHTML += "<table id='_dt2_dttable_" + ctn + "' style='font-size:9pt' border='0' width='100%' height='100%' cellpadding='0' cellspacing='0' > ";
  61. strHTML += "<thead><tr>";
  62. for ( i = 0; i < 7; i ++ )
  63. strHTML += "<td valign='bottom' align='center' height='16' style='font-size:9pt; color:#004080;'>" + _g_dt2_theWeeks[i] + "</td>";
  64. strHTML += "</tr><tr><td height='1' colspan='7' bgcolor='#000000'></td></tr>";
  65. strHTML += "</thead>";
  66. strHTML += "<tbody></tbody>";
  67. strHTML += "<tfoot><tr><tr><td colspan='7' height='1' bgcolor='#000000'></td></tr>";
  68. var curDay = new Date();
  69. strHTML += "<tr><td valign='bottom' colspan='7' style='font-color:#000000; font-weight:bold; font-size:9pt; verical-align:bottom;'><img align='middle' src='" + _g_dt2_imgCurDay + "' border='0' width='40' height='11'>&nbsp;今天:" + curDay.getFullYear() + "-" + ((curDay.getMonth() < 9) ? "0" + (curDay.getMonth() + 1) : (curDay.getMonth() + 1)) + "-" + ((curDay.getDate() < 10) ? "0" + curDay.getDate() : curDay.getDate()) +"</td></tr>";
  70. strHTML += "</tfoot></table></body></html>";
  71. window.frames("_dt2_iframe_" + ctn).document.open();
  72. window.frames("_dt2_iframe_" + ctn).document.write(strHTML);
  73. window.frames("_dt2_iframe_" + ctn).document.close();
  74. _dt2_drawDTDays(ctn, year, month, day);
  75. }
  76. function _dt2_showDTTable(ctn) {
  77. if ( _g_dt2_ShowingDTPicker != null ) {
  78. if( ctn != _g_dt2_ShowingDTPicker ) {
  79. document.all("div_dtTable_" + _g_dt2_ShowingDTPicker).innerHTML = "";
  80. document.all("div_dtTable_" + _g_dt2_ShowingDTPicker).style.visibility = "hidden";
  81. }
  82. }
  83. ct = document.all("div_dtTable_" + ctn);
  84. if ( ct.style.visibility == "hidden") {
  85. _dt2_drawDTTable(ctn);
  86. ct.style.visibility = "visible";
  87. x = window.event.clientX - window.event.offsetX - 4;
  88. y = window.event.clientY - window.event.offsetY + 17;
  89. clWidth = window.document.body.clientWidth;
  90. if ( clWidth < 200 ) {
  91. x = 1;
  92. } else if ( x + 200 + 1 > clWidth) {
  93. x = clWidth - 200 - 1;
  94. }
  95. clHeight = window.document.body.clientHeight;
  96. if (clHeight < 140) {
  97. y = 1;
  98. } else if ( y + 140 + 1 > clHeight){
  99. y = clHeight - 140 - 1;
  100. }
  101. ct.style.left = x + "px";
  102. ct.style.top = y + "px";
  103. _g_dt2_ShowingDTPicker = ctn;
  104. } else {
  105. _dt2_closeDTTable(ctn);
  106. }
  107. }
  108. function _dt2_closeDTTable(ctn) {
  109. ct = document.all("div_dtTable_" + ctn);
  110. ct.innerHTML = "";
  111. ct.style.visibility = "hidden";
  112. _g_dt2_ShowingDTPicker = null;
  113. if(ctn=="txtMyGrid"){
  114. var o=window.document.all.tags("webgrid")
  115.    for(var ii=0;ii<o.length;ii++){
  116. o[ii].txtTotd()
  117. }
  118. }
  119. if(ctn=="txt1"){
  120. ChangeToTable(txt1.value)
  121. }
  122. if(ctn=="txt2"){
  123. ChangeToTable(txt2.value,'after')
  124. }
  125. }
  126. function _dt2_getDTYear(ctn) {
  127. if ( document.all(ctn).value.length > 0 ) {
  128. year = parseInt(document.all(ctn).value.substr(0, 4));
  129. if ( !isNaN(year) ) 
  130. return year;
  131. }
  132. return 1900;
  133. }
  134. function _dt2_getDTMonth(ctn) {
  135. var value = document.all(ctn).value;
  136. if ( value.length > 0 ) {
  137. pos = value.indexOf('-');
  138. if ( pos > 0 ) {
  139. month = parseInt(value.substr(pos+1, 2));
  140. if ( !isNaN(month) )
  141. return month;
  142. }
  143. }
  144. return 1;
  145. }
  146. function _dt2_getDTDay(ctn) {
  147. var value = document.all(ctn).value;
  148. if ( value.length > 0 ) {
  149. pos = value.indexOf('-');
  150. if ( pos > 0 ) {
  151. dpos = value.indexOf('-', pos+1);
  152. if (dpos > 0) {
  153. day = parseInt(value.substr(dpos+1, 2));
  154. if ( !isNaN(day) )
  155. return day;
  156. }
  157. }
  158. }
  159. return 1;
  160. // var dt = new Date(_dt2_GetStdDate(document.all(ctn).value).replace("-", "/"))
  161. // return dt.getDate();
  162. }
  163. function _dt2_setDTYear(ctn, year) {
  164. _dt2_setDT(ctn, year, _dt2_getDTMonth(ctn), _dt2_getDTDay(ctn));
  165. }
  166. function _dt2_setDTMonth(ctn, month) {
  167. var year = _dt2_getDTYear(ctn);
  168. var day = _dt2_getDTDay(ctn);
  169. var maxDays = _dt2_getDayCount(year, month);
  170. day = day < maxDays ? day : maxDays;
  171. _dt2_setDT(ctn, year, month, day);
  172. }
  173. function _dt2_setDTDay(ctn, day) {
  174. _dt2_setDT(ctn, _dt2_getDTYear(ctn), _dt2_getDTMonth(ctn), day);
  175. }
  176. function _dt2_setDT(ctn, year, month, day) {
  177. document.all(ctn).value = _dt2_GetStdDate(year + "/" + (month < 10 ? "0" + month : month) + "/" + (day < 10 ? "0" + day : day));
  178. }
  179. function _dt2_onYearChange(ctn) {
  180. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  181. if (!isNaN(year)) {
  182. _dt2_setDTYear(ctn, year);
  183. _dt2_drawDTDays(ctn, year, _dt2_getDTMonth(ctn), _dt2_getDTDay(ctn));
  184. } else {
  185. alert("非法的年份格式,请重新输入年份")
  186. window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).focus();
  187. }
  188. }
  189. function _dt2_onMonthChange(ctn) {
  190. var month = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value)
  191. if (month == 0)
  192. return;
  193. if ( !isNaN(month) ) {
  194. _dt2_setDTMonth(ctn, month);
  195. _dt2_drawDTDays(ctn, _dt2_getDTYear(ctn), month, _dt2_getDTDay(ctn));
  196. }
  197. }
  198. function _dt2_addYear(ctn) {
  199. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  200. if (isNaN(year)) {
  201. alert("非法的年份格式,请重新输入年份")
  202. window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).focus();
  203. return;
  204. }
  205. window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value = year + 1;
  206. _dt2_setDTYear(ctn, year+1);
  207. _dt2_drawDTDays(ctn, year + 1, _dt2_getDTMonth(ctn), _dt2_getDTDay(ctn));
  208. }
  209. function _dt2_subYear(ctn) {
  210. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  211. if (isNaN(year)) {
  212. alert("非法的年份格式,请重新输入年份")
  213. window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).focus();
  214. return;
  215. }
  216. window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value = year - 1;
  217. _dt2_setDTYear(ctn, year-1);
  218. _dt2_drawDTDays(ctn, year - 1, _dt2_getDTMonth(ctn), _dt2_getDTDay(ctn));
  219. }
  220. function _dt2_addMonth(ctn) {
  221. var month = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value);
  222. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  223. if ( isNaN(year) || isNaN(month) )
  224. return;
  225. if ( month == 12 ) {
  226. year ++;
  227. month = 1;
  228. } else {
  229. month ++;
  230. }
  231. window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value = month;
  232. _dt2_setDT(ctn, year, month, _dt2_getDTDay(ctn));
  233. _dt2_drawDTDays(ctn, year, month, _dt2_getDTDay(ctn));
  234. }
  235. function _dt2_subMonth(ctn) {
  236. var month = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value);
  237. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  238. if ( isNaN(year) || isNaN(month) )
  239. return;
  240. if ( month == 1 ) {
  241. year --;
  242. month = 12;
  243. } else {
  244. month --;
  245. }
  246. window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value = month;
  247. _dt2_setDT(ctn, year, month, _dt2_getDTDay(ctn));
  248. _dt2_drawDTDays(ctn, year, month, _dt2_getDTDay(ctn));
  249. }
  250. function _dt2_drawDTDays(ctn, year, month, day) {
  251. var dayCount = _dt2_getDayCount(year, month);
  252. var dayIndex = 0;
  253. var preMonthDayCount = 0, preMonthShowDayCount = 0, nextMonthShowDayCount = 0;
  254. var startDate;
  255. var table = window.frames("_dt2_iframe_" + ctn).document.all("_dt2_dttable_" + ctn).tBodies[0];
  256. if (month > 1) {
  257. startDate = new Date(year, month-1, 1);
  258. preMonthDayCount = _dt2_getDayCount(year, month-1);
  259. } else {
  260. startDate = new Date(year-1, 12, 1);
  261. preMonthDayCount = _dt2_getDayCount(year-1, 12);
  262. }
  263. var week = startDate.getDay();
  264. var strHTML = "";
  265. preMonthShowDayCount = week;
  266. if ( week > 0 ) { 
  267. if (month == 1) {
  268. for ( i = week; i > 0; i -- )
  269. _g_dt2_days[dayIndex++] = 31 - i + 1;
  270. } else {
  271. for ( i = week; i > 0; i -- )
  272. _g_dt2_days[dayIndex++] = preMonthDayCount - i + 1;
  273. }
  274. }
  275. for ( i = 0; i < dayCount; i ++ ) {
  276. _g_dt2_days[dayIndex++] = i + 1;
  277. }
  278. nextMonthShowDayCount = 42 - dayIndex;
  279. for ( i = 0; i < nextMonthShowDayCount; i ++ ) {
  280. _g_dt2_days[dayIndex++] = i + 1;
  281. }
  282. //clear all rows
  283. while ( table.rows.length > 0 ) {
  284. table.deleteRow()
  285. }
  286. for ( i = 0; i < 6; i++ ) {
  287. aRow = table.insertRow();
  288. for ( j = 0; j < 7; j++ ) {
  289. cell = aRow.insertCell();
  290. cell.align = "center";
  291. cell.onmousemove = new Function("this.style.cursor='hand'; if ( this.style.color != '#ffffff' ) this.style.backgroundColor='#4aff73';");
  292. cell.onmouseout = new Function("if ( this.style.color != '#ffffff' ) this.style.backgroundColor='#ffffff';");
  293. cell.style.fontSize="9pt";
  294. if ( (i*7 + j) < preMonthShowDayCount ) {
  295. cell.style.color = "#808080";
  296. cell.onclick = new Function("_dt2_on_selectDay('" + ctn + "', -1, " + _g_dt2_days[i*7 + j] + ");");
  297. }
  298. else if ( (42 - (i*7 + j)) <= nextMonthShowDayCount ) {
  299. cell.style.color = "#909090";
  300. cell.onclick = new Function("_dt2_on_selectDay('" + ctn + "', 1, " + _g_dt2_days[i*7 + j] + ");");
  301. }
  302. else if ( _g_dt2_days[i*7 + j] == day ) {
  303. cell.style.color = "#ffffff";
  304. cell.style.backgroundColor = "#004080";
  305. cell.onclick = new Function("_dt2_closeDTTable('" + ctn + "');");
  306. //cell.style.backgroundImage="url('" + _g_dt2_imgSelDay + "')";
  307. }
  308. else {
  309. cell.style.color = (j == 0 || j == 6) ? "#f00000" : "#000000";
  310. cell.onclick = new Function("_dt2_on_selectDay('" + ctn + "', 0, " + _g_dt2_days[i*7 + j] + ");");
  311. }
  312. cell.innerText = _g_dt2_days[i*7 + j];
  313. }
  314. }
  315. //return strHTML;
  316. }
  317. function _dt2_on_selectDay(ctn, flag, day) {
  318. var year = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_input_year_" + ctn).value);
  319. var month = parseInt(window.frames("_dt2_iframe_" + ctn).document.all("dt2_cbb_month_" + ctn).value);
  320. if ( isNaN(year) || isNaN(month) )
  321. return;
  322. if ( flag == -1 ) {
  323. if ( month == 1 ) {
  324. year --;
  325. month = 12;
  326. } else {
  327. month --;
  328. }
  329. }
  330. else if ( flag == 1 ) {
  331. if ( month == 12 ) {
  332. year ++;
  333. month = 1;
  334. } else {
  335. month ++;
  336. }
  337. }
  338. _dt2_setDT(ctn, year, month, day);
  339. _dt2_closeDTTable(ctn);
  340. document.all(ctn).focus();
  341. }
  342. function _dt2_getDayCount(year, month) {
  343. switch(month) { 
  344. case 1:case 3:case 5:case 7:case 8:case 10:case 12:
  345. return 31;
  346. case 4:case 6:case 9:case 11:
  347. return 30;
  348. case 2:
  349. return (((year%4)==0) && ((year%10)!=0) ) || ((year%100)==0) ? 29 : 28;
  350. default:
  351. return 31;
  352. }
  353. }
  354. function _dt2_check(ctn) {
  355. if ( !_dt2_CheckDate( document.all(ctn).value ) ) {
  356. document.all(ctn).focus();
  357. }
  358. }
  359. function _dt2_CheckDate( dateStr ) {
  360. var standStr
  361. var newDateObj
  362. var strErr, idxMonth, idxDay
  363. var year, month, day
  364. strErr1 = "标准的日期格式如:rn    短日期格式:2000-02-21 rn    长日期格式:2000-02-21 21:01:20 或 2000-02-21 21:01rn"
  365. if ( dateStr.length == 0 ) {
  366. alert("错误:日期不能为空,请输入标准格式的日期rnrn" + strErr1 )
  367. return false
  368. }
  369. standStr = dateStr.replace("-","/")
  370. if ( dateStr.indexOf("-", 0) != 2 && dateStr.indexOf("-", 0) != 4 ) {
  371. alert("错误:日期输入不规范!rnrn" + strErr1)
  372. return false;
  373. }
  374. idxMonth = dateStr.indexOf("-", 0) + 1
  375. idxDay = dateStr.indexOf("-", idxMonth) + 1
  376. year = dateStr.substring(0, idxMonth - 1)
  377. month = dateStr.substring(idxMonth, idxDay - 1)
  378. if ( month < 1 || month > 12 ) {
  379. alert("错误:输入的月份无效rn")
  380. return false
  381. }
  382. if (dateStr.indexOf(" ", idxDay) != -1)
  383. day = dateStr.substring(idxDay, dateStr.indexOf(" ", idxDay))
  384. else
  385. day = dateStr.substring(idxDay)
  386. newDateObj = new Date( standStr )
  387. if ( newDateObj == "NaN" ) {
  388. alert("错误:日期输入不规范!中间可能有空格或者字符rnrn" + strErr1)
  389. return false;
  390. }
  391. if ( day != newDateObj.getDate()) {
  392. alert("错误:日期不是正常公历日期!rnrn     公元" + parseInt(year) + "年" + parseInt(month) + "月没有" + day + "号!")
  393. return false;
  394. }
  395. return true;
  396. }
  397. function _dt2_GetStdDate( dateStr ) {
  398. var newDateObj
  399. var month, day
  400. newDateObj = new Date( dateStr.replace("-", "/") )
  401. if ( newDateObj == "NaN" )
  402. return dateStr;
  403. month = newDateObj.getMonth() + 1
  404. day = newDateObj.getDate()
  405. return newDateObj.getFullYear() + "-" + (month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day);
  406. }