利用Query+bootstrap和js兩種方式實(shí)現(xiàn)日期選擇器
前言
所謂日期選擇是在下拉列表中選擇年、月、日,年顯示前后的五年,12個(gè)月,日就是有30、31、29、28天的區(qū)別,隨著月份的變而變,本文介紹了利用Query+bootstrap和js實(shí)現(xiàn)日期選擇器的兩種方法,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
一、js方式的日期選擇
(1)首先就是三個(gè)下拉列表了,點(diǎn)擊年、月、日顯示列表中的內(nèi)容,這樣就是要給這三個(gè)列表加“點(diǎn)擊事件”onclick
<select id="nian" onclick="biantian()"></select>年 <select id="yue" onclick="biantian()"></select>月 <select id="tian"></select>日
也就是這樣的效果:

(2)寫js方法
注意:年月日三個(gè)選擇框,那么就是要寫三個(gè)方法
填充年的方法
function FillNian()
{
var b = new Date(); //取當(dāng)前時(shí)間
var nian = parseInt(b.getFullYear()); //取當(dāng)前年份
var str = "";
for(var i=nian-5;i<nian+6;i++) //顯示前后的5年
{<br> //判斷年的當(dāng)前選中,選中當(dāng)前的年份
if( i==nian)
{
str = str+"<option selected='selected' value='"+i+"' >"+i+"</option>";
}
else
{
str = str+"<option value='"+i+"'>"+i+"</option>";
}
}
//給id名是nian的下拉菜單中加添加html,html就是上面寫到的str
document.getElementById("nian").innerHTML = str;
}
寫完了年方法,記得調(diào)用一下,查看效果如下:

(3)填充月的方法:這個(gè)和年的也是差不多,沒有什么大的變化
function FillYue()
{
var b = new Date(); //取當(dāng)前時(shí)間
var yue = parseInt(b.getMonth()+1); //取當(dāng)前月份
var str = "";
for(var i=1;i<13;i++) //循環(huán);月份是從1開始,一年12個(gè)月,小于13
{<br> //判斷當(dāng)前月份的選中
if( i==yue)
{
str = str+"<option selected='selected' value='"+i+"' >"+i+"</option>";
}
else
{
str = str+"<option value='"+i+"'>"+i+"</option>";
}
}
document.getElementById("yue").innerHTML = str; //將str值寫到id名是yue的下拉列表中
}
寫完了月的方法,記得調(diào)用一下,查看效果如下:

(3)填充天的方法:和年和月的差不多,不一樣的就是月份不一樣,天數(shù)也是不一樣的
function FillTian()
{
var b = new Date();
var tian = parseInt(b.getDate()); //獲取當(dāng)前天數(shù)
var yue = document.getElementById("yue").value; //找到月的值
var nian = document.getElementById("nian").value; //找到年的值
var ts = 31;
//30號的月數(shù):月數(shù)是4、6、9、11時(shí),天數(shù)是30天
if(yue==4 || yue==6 || yue==9 || yue==11)
{
ts=30;
}
//2月不同年的天
if(yue==2)
{<br> //被4整除,同時(shí)不被100整除;或是被400整除的年
if((nian%4==0 && nian%100 != 0) || nian%400==0)
{
ts = 29; //閏年
}
else
{
ts = 28; //平年
}
}
var str = "";
for(var i=1;i<ts+1;i++)
{<br> //判斷天數(shù)是否選中
if( i==tian)
{
str = str+"<option selected='selected' value='"+i+"' >"+i+"</option>";
}
else
{
str = str+"<option value='"+i+"'>"+i+"</option>";
}
}
document.getElementById("tian").innerHTML = str; //將str的值給id名是天的下拉列表
}
寫完了日的方法,記得調(diào)用一下,查看整體效果如下:
閏年如下:

二、Query+bootstrap的日期選擇器
想用jQuery和bootstrap,必須引入這兩個(gè)的包
<script src="../jquery-1.11.2.min.js"></script> <script src="../dist/js/bootstrap.min.js"></script> <script src="riqishijian.js"></script> <link href="../dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
進(jìn)入正題:點(diǎn)擊文本框會(huì)彈出個(gè)日期選擇的窗口,所以
(1)寫個(gè)提示字,并且寫個(gè)文本框
<input type="text" id="riqi" /> //最終顯示的日期時(shí)間的地方,文本框起個(gè)名字對其加事件
(2)寫bootstrap的模態(tài)框,直接引用就可以
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content"><br> //標(biāo)題部分
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">日期選擇</h4> //顯示標(biāo)題的地方
</div><br> //主體部分
<div class="modal-body">
<select id="nian"> //年的下拉列表
</select>
<select id="yue"> //月的下拉列表
</select>
<select id="tian"> //天的下拉列表
</select>
</div><br> //最后部分
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">關(guān)閉</button>
<button type="button" class="btn btn-primary" id="sure">確定</button> //確定按鈕也要是加事件的,所以也要起個(gè)名字
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
(3)考慮下怎么顯示這個(gè)彈出框?
單擊顯示日期的文本框再彈出選擇框,那么就要對文本框設(shè)置事件
$("#riqi").click(function(){
$('#myModal').modal('show'); //bootstrap直接提示怎么顯示彈窗,直接拿過來用就可以
})
看下效果:

(4)寫jQuery頁面:年月日的方法其實(shí)和js的寫法差不多,就是樣式和取賦方式和js有點(diǎn)區(qū)別,其他的沒有什么可以注意的
當(dāng)然,寫完了jQuery方法,記得用的時(shí)候調(diào)用一下
jQuery頁面中的年、月、日的方法:和js中的邏輯都是一樣的(不多說)
//加載年份
function LoadNian()
{
var date=new Date; //和js的方法一樣取當(dāng)前時(shí)間和年份
var year=date.getFullYear();
var str = "";
for(var i=year-5;i<year+6;i++)
{<br> //判斷當(dāng)前年是否選中
if(i==year)
{
str +="<option selected='selected' value='"+i+"'>"+i+"</option>";
}
else
{
str +="<option value='"+i+"'>"+i+"</option>";
}
}
$("#nian").html(str); //也是將值寫到年的下拉列表中
}
//加載月份
function LoadYue()
{<br> //和js中的月份的邏輯都是一樣的
var date=new Date;
var yue=date.getMonth()+1; //取到當(dāng)前月份
var str = "";
for(var i=1;i<13;i++)
{<br> //判斷月份是否選中
if(i==yue)
{
str +="<option selected='selected' value='"+i+"'>"+i+"</option>";
}
else
{
str +="<option value='"+i+"'>"+i+"</option>";
}
}
$("#yue").html(str);
}
//加載天
function LoadTian()
{<br> //和js中的邏輯是一樣的
var date=new Date;
var tian = date.getDate(); //取到天數(shù)
var zs = 31; //總天數(shù)
var nian = $("#nian").val(); //取到年的值
var yue = $("#yue").val(); //取到月的值<br><br> //也是天數(shù)是30天的月份
if(yue == 4 || yue==6 || yue==9 || yue==11)
{
zs = 30;
}
else if(yue==2)
{<br> //判斷閏月的
if((nian%4==0 && nian%100 !=0) || nian%400==0)
{
zs = 29;
}
else
{
zs = 28;
}
}
var str = "";
for(var i=1;i<zs+1;i++)
{<br> //判斷天數(shù)是否選中
if(i==tian)
{
str +="<option selected='selected' value='"+i+"'>"+i+"</option>";
}
else
{
str +="<option value='"+i+"'>"+i+"</option>";
}
}
$("#tian").html(str);
}
最后就是要選擇哪一年,后面的月和日都要變,那么就要在最開始寫
$(document).ready(function(e) {
$("#nian").change(function(){ //選年改變天
LoadTian();
})
$("#yue").change(function(){ //選月改變天
LoadTian();
})
});
(5)把選中的年月日的值傳入文本框中
$("#sure").click(function(){
var nian = $("#nian").val(); //取到年的值
var yue = $("#yue").val(); //取到月份的值
var tian = $("#tian").val(); //取到天數(shù)的值
var str = nian+"-"+yue+"-"+tian; //拼接字符串顯示年月日
$("#riqi").val(str); //將值放到riqi的文本框中
$('#myModal').modal('hide') //將彈窗關(guān)閉
})
這樣選擇器就結(jié)束了,看下整體效果:
單擊文本框,彈出日期選擇框

選擇一個(gè)日期,單擊確定按鈕

另外:也可以除了日期,也可以加上默認(rèn)時(shí)間
$("#sure").click(function(){
var nian = $("#nian").val(); //取到年的值
var yue = $("#yue").val(); //取到月份的值
var tian = $("#tian").val(); //取到天數(shù)的值
var d = new Date();
var str = nian+"-"+yue+"-"+tian+" "+d.getHours()+":"+d.getMinutes()+":"+d.getDate() ; //拼接字符串顯示年月日,還有時(shí)間
$("#riqi").val(str); //將值放到riqi的文本框中
$('#myModal').modal('hide') //將彈窗關(guān)閉
})
選擇效果,后面的時(shí)間是自動(dòng)默認(rèn)顯示的:

日期選擇器兩種方法都可以使用。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
JavaScript實(shí)現(xiàn)基于Cookie的存儲(chǔ)類實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)基于Cookie的存儲(chǔ)類,實(shí)例分析了javascript通過cookie實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
JS自定義功能函數(shù)實(shí)現(xiàn)動(dòng)態(tài)添加網(wǎng)址參數(shù)修改網(wǎng)址參數(shù)值
本文自定義JS功能函數(shù)可動(dòng)態(tài)添加網(wǎng)址參數(shù),修改網(wǎng)址參數(shù)值,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助2013-08-08
小程序點(diǎn)擊圖片實(shí)現(xiàn)自動(dòng)播放視頻
這篇文章主要為大家詳細(xì)介紹了小程序點(diǎn)擊圖片實(shí)現(xiàn)自動(dòng)播放視頻,停止上一個(gè)視頻播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
實(shí)例詳解JSON取值(key是中文或者數(shù)字)方式
本文通過實(shí)例詳解JSON取值(key是中文或者數(shù)字)方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08
In Javascript Class, how to call the prototype method.(three
In Javascript Class, how to call the prototype method.(three method)...2007-01-01

