JS实现漂亮的时间选择框效果

网络编程 2021-07-04 20:00www.168986.cn编程入门
这篇文章主要介绍了JS实现漂亮的时间选择框效果,结合实例形式分析了javascript时间选择框插件的实现与使用方法,需要的朋友可以参考下

本文实例讲述了JS实现漂亮的时间选择框效果。分享给大家供大家参考,具体如下:

HTML代码部分:

<html>
<script language=javascript src="dataone.js"></script>
<table align="center">
<tr>
<td>
<body>
(1)只选择日期  <input type="text" name="date"  readOnly onClick="setDay(this);"><br/>
 (2)选择日期和小时 <input type="text" name="dateh" readOnly onClick="setDayH(this);"><br/>
 (3)选择日期和小时及分钟 <input type="text" name="datehm" readOnly onClick="setDayHM(this);">
  </body>
</td>
</tr>
</table>
</html>

dataone.js代码:

/**
*使用方法:
  * (1)只选择日期  <input type="text" name="date"  readOnly onClick="setDay(this);">
  * (2)选择日期和小时 <input type="text" name="dateh" readOnly onClick="setDayH(this);">
  * (3)选择日期和小时及分钟 <input type="text" name="datehm" readOnly onClick="setDayHM(this);">
  *设置参数的方法
  * (1)设置日期分隔符  setDateSplit(strSplit);默认为"-"
  * (2)设置日期与时间之间的分隔符 setDateTimeSplit(strSplit);默认为" "
  * (3)设置时间分隔符  setTimeSplit(strSplit);默认为":"
  * (4)设置(1),(2),(3)中的分隔符 setSplit(strDateSplit,strDateTimeSplit,strTimeSplit);
  * (5)设置开始和结束年份  setYearPeriod(intDateBeg,intDateEnd)
  *说明:
  * 默认返回的日期时间格式如同:2005-02-02 08:08
  */
  //------------------ 样式定义 ---------------------------//
  //功能按钮同样样式
  var s_tian_turn_base = "height:16px;font-size:9pt;color:white;border:0 solid #CCCCCC;cursor:hand;background-color:#2650A6;";
  //翻年、月等的按钮
  var s_tian_turn = "width:28px;" + s_tian_turn_base;
  //关闭、清空等按钮样式
  var s_tian_turn2 = "width:22px;" + s_tian_turn_base;
  //年选择下拉框
  var s_tian_select = "width:64px;display:none;";
  //月、时、分选择下拉框
  var s_tian_select2 = "width:46px;display:none;";
  //日期选择控件体的样式
  var s_tian_body = "width:150;background-color:#2650A6;display:none;z-index:9998;position:absolute;" +
   "border-left:1 solid #CCCCCC;border-:1 solid #CCCCCC;border-right:1 solid #999999;border-bottom:1 solid #999999;";
  //显示日的td的样式
  var s_tian_day = "width:21px;height:20px;background-color:#D8F0FC;font-size:10pt;";
  //字体样式
  var s_tian_font = "color:#FFCC00;font-size:9pt;cursor:hand;";
  //链接的样式
  var s_tian_link = "text-decoration:none;font-size:9pt;color:#2650A6;";
  //横线
  var s_tian_line = "border-bottom:1 solid #6699CC";
  //------------------ 变量定义 ---------------------------//
  var tianYearSt = 1950;//可选择的开始年份
  var tianYearEnd = 2010;//可选择的结束年份
  var tianDateNow = new Date();
  var tianYear = tianDateNow.getFullYear(); //定义年的变量的初始值
  var tianMonth = tianDateNow.getMonth()+1; //定义月的变量的初始值
  var tianDay = tianDateNow.getDate();
  var tianHour = 8;//tianDateNow.getHours();
  var tianMinute = 0;//tianDateNow.getMinutes();
  var tianArrDay=new Array(42);     //定义写日期的数组
  var tianDateSplit = "-";   //日期的分隔符号
  var tianDateTimeSplit = " ";  //日期与时间之间的分隔符
  var tianTimeSplit = ":";   //时间的分隔符号
  var tianOutObject;   //接收日期时间的对象
  var arrTianHide = new Array();//被强制隐藏的标签
  var m_bolShowHour = false;//是否显示小时
  var m_bolShowMinute = false;//是否显示分钟
  var m_aMonHead = new Array(12);     //定义阳历中每个月的最大天数
  m_aMonHead[0] = 31; m_aMonHead[1] = 28; m_aMonHead[2] = 31; m_aMonHead[3] = 30; m_aMonHead[4] = 31; m_aMonHead[5] = 30;
  m_aMonHead[6] = 31; m_aMonHead[7] = 31; m_aMonHead[8] = 30; m_aMonHead[9] = 31; m_aMonHead[10] = 30; m_aMonHead[11] = 31;
  // ---------------------- 用户可调用的函数 -----------------------------//
  //用户主调函数-只选择日期
  function setDay(obj){
  tianOutObject = obj;
  //如果标签中有值,则将日期初始化为当前值
  var strValue = tianTrim(tianOutObject.value);
  if( strValue != "" ){
   tianInitDate(strValue);
  }
  tianPopCalendar();
  }
  //用户主调函数-选择日期和小时
  function setDayH(obj){
  tianOutObject = obj;
  m_bolShowHour = true;
  //如果标签中有值,则将日期和小时初始化为当前值
  var strValue = tianTrim(tianOutObject.value);
  if( strValue != "" ){
   tianInitDate(strValue.substring(0,10));
   var hour = strValue.substring(11,13);
   if( hour < 10 ) tianHour = hour.substring(1,2);
  }
  tianPopCalendar();
  }
  //用户主调函数-选择日期和小时及分钟
  function setDayHM(obj){
  tianOutObject = obj;
  m_bolShowHour = true;
  m_bolShowMinute = true;
  //如果标签中有值,则将日期和小时及分钟初始化为当前值
  var strValue = tianTrim(tianOutObject.value);
  if( strValue != "" ){
   tianInitDate(strValue.substring(0,10));
   var time = strValue.substring(11,16);
   var arr = time.split(tianTimeSplit);
   tianHour = arr[0];
   tianMinute = arr[1];
   if( tianHour < 10 ) tianHour = tianHour.substring(1,2);
   if( tianMinute < 10 ) tianMinute = tianMinute.substring(1,2);
  }
  tianPopCalendar();
  }
  //设置开始日期和结束日期
  function setYearPeriod(intDateBeg,intDateEnd){
  tianYearSt = intDateBeg;
  tianYearEnd = intDateEnd;
  }
  //设置日期分隔符。默认为"-"
  function setDateSplit(strDateSplit){
  tianDateSplit = strDateSplit;
  }
  //设置日期与时间之间的分隔符。默认为" "
  function setDateTimeSplit(strDateTimeSplit){
  tianDateTimeSplit = strDateTimeSplit;
  }
  //设置时间分隔符。默认为":"
  function setTimeSplit(strTimeSplit){
  tianTimeSplit = strTimeSplit;
  }
  //设置分隔符
  function setSplit(strDateSplit,strDateTimeSplit,strTimeSplit){
  tianDateSplit(strDateSplit);
  tianDateTimeSplit(strDateTimeSplit);
  tianTimeSplit(strTimeSplit);
  }
  //设置默认的日期。格式为:YYYY-MM-DD
  function setDefaultDate(strDate){
  tianYear = strDate.substring(0,4);
  tianMonth = strDate.substring(5,7);
  tianDay = strDate.substring(8,10);
  }
  //设置默认的时间。格式为:HH24:MI
  function setDefaultTime(strTime){
  tianHour = strTime.substring(0,2);
  tianMinute = strTime.substring(3,5);
  }
  // ---------------------- end 用户可调用的函数 -----------------------------//
  //------------------ begin 页面显示部分 ---------------------------//
  var weekName = new Array("日","一","二","三","四","五","六");
  document.write('<div id="divTianDate" style="'+s_tian_body+'" style="本日历选择控件由tian根据前人经验完善而成!">');
  document.write('<div align="center" id="divTianDateText" Author="tian" style="padding-:2px;">');
  document.write('<span id="tianYearHead" Author="tian" style="'+s_tian_font+'" '+
  'onclick="spanYearCEvent();">&nbsp;年</span>');
  document.write('<select id="selTianYear" style="'+s_tian_select+'" Author="tian" '+
  ' onChange="tianYear=this.value;tianSetDay(tianYear,tianMonth);document.all.tianYearHead.style.display=\'\';'+
  'this.style.display=\'none\';">');
  for(var i=tianYearSt;i <= tianYearEnd;i ++){
  document.writeln('<option value="' + i + '">' + i + '年</option>');
  }
  document.write('</select>');
  document.write('<span id="tianMonthHead" Author="tian" style="'+s_tian_font+'" '+
  'onclick="spanMonthCEvent();">&nbsp;&nbsp;月</span>');
  document.write('<select id="selTianMonth" style="'+s_tian_select2+'" Author="tian" '+
  'onChange="tianMonth=this.value;tianSetDay(tianYear,tianMonth);document.all.tianMonthHead.style.display=\'\';'+
  'this.style.display=\'none\';">');
  for(var i=1;i <= 12;i ++){
  document.writeln('<option value="' + i + '">' + i + '月</option>');
  }
  document.write('</select>');
  //document.write('</div>');
  //document.write('<div align="center" id="divTianTimeText" Author="tian">');
  document.write('<span id="tianHourHead" Author="tian" style="'+s_tian_font+'display:none;" '+
  'onclick="spanHourCEvent();">&nbsp;时</span>');
  document.write('<select id="selTianHour" style="'+s_tian_select2+'display:none;" Author="tian" '+
  ' onChange="tianHour=this.value;tianWriteHead();document.all.tianHourHead.style.display=\'\';' +
  'this.style.display=\'none\';">');
  for(var i=0;i <= 23;i ++){
  document.writeln('<option value="' + i + '">' + i + '时</option>');
  }
  document.write('</select>');
  document.write('<span id="tianMinuteHead" Author="tian" style="'+s_tian_font+'display:none;" '+
  'onclick="spanMinuteCEvent();">&nbsp;&nbsp;分</span>');
  document.write('<select id="selTianMinute" style="'+s_tian_select2+'display:none;" Author="tian" '+
  ' onChange="tianMinute=this.value;tianWriteHead();document.all.tianMinuteHead.style.display=\'\';'+
  'this.style.display=\'none\';">');
  for(var i=0;i <= 59;i ++){
  document.writeln('<option value="' + i + '">' + i + '分</option>');
  }
  document.write('</select>');
  document.write('</div>');
  //输出一条横线
  document.write('<div style="'+s_tian_line+'"></div>');
  document.write('<div align="center" id="divTianTurn" style="border:0;" Author="tian">');
  document.write('<input type="button" style="'+s_tian_turn+'" value="年↑" title="上一年" onClick="tianPrevYear();">');
  document.write('<input type="button" style="'+s_tian_turn+'" value="年↓" title="下一年" onClick="tianNextYear();">&nbsp;');
  document.write('<input type="button" style="'+s_tian_turn+'" value="月↑" title="上一月" onClick="tianPrevMonth();">');
  document.write('<input type="button" style="'+s_tian_turn+'" value="月↓" title="下一月" onClick="tianNextMonth();">');
  document.write('</div>');
  //输出一条横线
  document.write('<div style="'+s_tian_line+'"></div>');
  document.write('<table border=0 cellspacing=0 cellpadding=0 bgcolor=white onselectstart="return false">');
  document.write(' <tr style="background-color:#2650A6;font-size:10pt;color:white;height:22px;" Author="tian">');
  for(var i =0;i < weekName.length;i ++){
  //输出星期
  document.write('<td width="21" align="center" Author="tian">' + weekName[i] + '</td>');
  }
  document.write(' </tr>');
  document.write('</table>');
  //输出天的选择
  document.write('<table border=0 cellspacing=1 cellpadding=0 bgcolor=white onselectstart="return false">');
  var n = 0;
  for (var i=0;i<5;i++) {
  document.write (' <tr align=center id="trTianDay' + i + '" >');
  for (var j=0;j<7;j++){
   document.write('<td align="center" id="tdTianDay' + n + '" '+
  'onClick="tianDay=this.innerText;tianSetValue(true);" '
   +' style="' + s_tian_day + '">&nbsp;</td>');
   n ++;
  }
  document.write (' </tr>');
  }
  document.write (' <tr align=center id="trTianDay5" >');
  document.write('<td align="center" id="tdTianDay35" onClick="tianDay=this.innerText;tianSetValue(true);" '
  +' style="' + s_tian_day + '">&nbsp;</td>');
  document.write('<td align="center" id="tdTianDay36" onClick="tianDay=this.innerText;tianSetValue(true);" '
  +' style="' + s_tian_day + '">&nbsp;</td>');
  document.write('<td align="right" colspan="5"><a href="javascript:tianClear();" style="' + s_tian_link + '">清空</a>'+
  '&nbsp;<a href="javascript:tianHideControl();" style="' + s_tian_link + '">关闭</a>' +
  '&nbsp;<a href="javascript:tianSetValue(true);" style="' + s_tian_link + '">确定</a>&nbsp;' +
  '</td>');
  document.write (' </tr>');
  document.write('</table>');
  document.write('</div>');
  //------------------ end 页面显示部分 ---------------------------//
  //------------------ 显示日期时间的span标签响应事件 ---------------------------//
  //单击年份span标签响应
  function spanYearCEvent(){
  hideElementsById(new Array("selTianYear","tianMonthHead"),false);
  if(m_bolShowHour) hideElementsById(new Array("tianHourHead"),false);
  if(m_bolShowMinute) hideElementsById(new Array("tianMinuteHead"),false);
  hideElementsById(new Array("tianYearHead","selTianMonth","selTianHour","selTianMinute"),true);
  }
  //单击月份span标签响应
  function spanMonthCEvent(){
  hideElementsById(new Array("selTianMonth","tianYearHead"),false);
  if(m_bolShowHour) hideElementsById(new Array("tianHourHead"),false);
  if(m_bolShowMinute) hideElementsById(new Array("tianMinuteHead"),false);
  hideElementsById(new Array("tianMonthHead","selTianYear","selTianHour","selTianMinute"),true);
  }
  //单击小时span标签响应
  function spanHourCEvent(){
  hideElementsById(new Array("tianYearHead","tianMonthHead"),false);
  if(m_bolShowHour) hideElementsById(new Array("selTianHour"),false);
  if(m_bolShowMinute) hideElementsById(new Array("tianMinuteHead"),false);
  hideElementsById(new Array("tianHourHead","selTianYear","selTianMonth","selTianMinute"),true);
  }
  //单击分钟span标签响应
  function spanMinuteCEvent(){
  hideElementsById(new Array("tianYearHead","tianMonthHead"),false);
  if(m_bolShowHour) hideElementsById(new Array("tianHourHead"),false);
  if(m_bolShowMinute) hideElementsById(new Array("selTianMinute"),false);
  hideElementsById(new Array("tianMinuteHead","selTianYear","selTianMonth","selTianHour"),true);
  }
  //根据标签id隐藏或显示标签
  function hideElementsById(arrId,bolHide){
  var strDisplay = "";
  if(bolHide) strDisplay = "none";
  for(var i = 0;i < arrId.length;i ++){
   var obj = document.getElementById(arrId[i]);
   obj.style.display = strDisplay;
  }
  }
  //------------------ end 显示日期时间的span标签响应事件 ---------------------------//
  //判断某年是否为闰年
  function isPinYear(year){
  var bolRet = false;
  if (0==year%4&&((year%100!=0)||(year%400==0))) {
   bolRet = true;
  }
  return bolRet;
  }
  //得到一个月的天数,闰年为29天
  function getMonthCount(year,month){
  var c=m_aMonHead[month-1];
  if((month==2)&&isPinYear(year)) c++;
  return c;
  }
  //重新设置当前的日。主要是防止在翻年、翻月时,当前日大于当月的最大日
  function setRealDayCount() {
  if( tianDay > getMonthCount(tianYear,tianMonth) ) {
   //如果当前的日大于当月的最大日,则取当月最大日
   tianDay = getMonthCount(tianYear,tianMonth);
  }
  }
  //在个位数前加零
  function addZero(value){
  if(value < 10 ){
   value = "0" + value;
  }
  return value;
  }
  //取出空格
  function tianTrim(str) {
  return str.replace(/(^\s*)|(\s*$)/g,"");
  }
  //为select创建一个option
  function createOption(objSelect,value,text){
  var option = document.createElement("OPTION");
  option.value = value;
  option.text = text;
  objSelect.options.add(option);
  }
  //往前翻 Year
  function tianPrevYear() {
  if(tianYear > 999 && tianYear <10000){tianYear--;}
  else{alert("年份超出范围(1000-9999)!");}
  tianSetDay(tianYear,tianMonth);
  //如果年份小于允许的最小年份,则创建对应的option
  if( tianYear < tianYearSt ) {
   tianYearSt = tianYear;
   createOption(document.all.selTianYear,tianYear,tianYear + "年");
  }
  checkSelect(document.all.selTianYear,tianYear);
  tianWriteHead();
  }
  //往后翻 Year
  function tianNextYear() {
  if(tianYear > 999 && tianYear <10000){tianYear++;}
  else{alert("年份超出范围(1000-9999)!");return;}
  tianSetDay(tianYear,tianMonth);
  //如果年份超过允许的最大年份,则创建对应的option
  if( tianYear > tianYearEnd ) {
   tianYearEnd = tianYear;
   createOption(document.all.selTianYear,tianYear,tianYear + "年");
  }
  checkSelect(document.all.selTianYear,tianYear);
  tianWriteHead();
  }
  //选择今天
  function tianToday() {
  tianYear = tianDateNow.getFullYear();
  tianMonth = tianDateNow.getMonth()+1;
  tianDay = tianDateNow.getDate();
  tianSetValue(true);
  //tianSetDay(tianYear,tianMonth);
  //selectObject();
  }
  //往前翻月份
  function tianPrevMonth() {
  if(tianMonth>1){tianMonth--}else{tianYear--;tianMonth=12;}
  tianSetDay(tianYear,tianMonth);
  checkSelect(document.all.selTianMonth,tianMonth);
  tianWriteHead();
  }
  //往后翻月份
  function tianNextMonth() {
  if(tianMonth==12){tianYear++;tianMonth=1}else{tianMonth++}
  tianSetDay(tianYear,tianMonth);
  checkSelect(document.all.selTianMonth,tianMonth);
  tianWriteHead();
  }
  //向span标签中写入年、月、时、分等数据
  function tianWriteHead(){
  document.all.tianYearHead.innerText = tianYear + "年";
  document.all.tianMonthHead.innerText = tianMonth + "月";
  if( m_bolShowHour ) document.all.tianHourHead.innerText = " "+tianHour + "时";
  if( m_bolShowMinute ) document.all.tianMinuteHead.innerText = tianMinute + "分";
  tianSetValue(false);//给文本框赋值,但不隐藏本控件
  }
  //设置显示天
  function tianSetDay(yy,mm) {
  setRealDayCount();//设置当月真实的日
  tianWriteHead();
  var strDateFont1 = "", strDateFont2 = "" //处理日期显示的风格
  for (var i = 0; i < 37; i++){tianArrDay[i]=""}; //将显示框的内容全部清空
  var day1 = 1;
  var firstday = new Date(yy,mm-1,1).getDay(); //某月第一天的星期几
  for (var i = firstday; day1 < getMonthCount(yy,mm)+1; i++){
   tianArrDay[i]=day1;day1++;
  }
  //如果用于显示日的最后一行的第一个单元格的值为空,则隐藏整行。
  //if(tianArrDay[35] == ""){
  // document.all.trTianDay5.style.display = "none";
  / 

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by