js實(shí)現(xiàn)日歷可獲得指定日期周數(shù)及星期幾示例分享(js獲取星期幾)
應(yīng)為要有交互,選擇了Js來(lái)實(shí)現(xiàn),也算是 結(jié)對(duì)編程 的初試吧。 我將顯示部分用html 寫好,點(diǎn)擊的按鈕觸發(fā)事件函數(shù)是check();
function onCheck(){
var Year = document.getElementById("year").value; //獲取文本框的“年” var theYear =Year * 1; //轉(zhuǎn)換為number類型 //alert(theYear); // 獲取月值
var month = document.getElementById("month");
var index1=month.selectedIndex; var theMonth = month.options[index1].value; //獲取月值
var day = document.getElementById("day");
var index2=day.selectedIndex;
var theDay = day.options[index2].value;
// 輸入值判斷部分
...
//調(diào)用核心函數(shù)
days(theYear,theMonth,theDay);
}
核心函數(shù)days如下:
function days(year,month,day) {
var days = 0; //表示改日期為當(dāng)年的第幾天
//累加月天數(shù)
for(var i = 1; i < month; i++ ){
switch(i){
//大月的情況加31
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:{
days += 31;
break;
}
//小月的情況加30
case 4:
case 6:
case 9:
case 11:{
days += 30;
break;
}
//二月的情況,根據(jù)年類型來(lái)加
case 2:{
if(isLeapYear(year)){
days += 29; //閏年加29
}
else {
days += 28;
}
break;
}
}
}
day = day * 1;
days += day; //月天數(shù)之和加上日天數(shù)
var date0 = new Date(year,0,1); //當(dāng)年的第一天是周幾
// alert(date0.getDay());
var date1 = new Date(year,month-1,day); //將日期值格式化,0-11代表1月-12月;
// alert((days + date0.getDay()+6)/7);
var nthOfWeek = Math.floor((days + date0.getDay()+6)/7); //向下取整
// alert(nthOfWeek);
var toDay = new Array("星期天","星期一","星期二","星期三","星期四","星期五","星期六");
//day.getDay();根據(jù)Date返一個(gè)星期中的某其中0為星期日
alert("該日期是一年中的第"+days+"天\n"+" 是第"+nthOfWeek+"周的"+toDay[date1.getDay()]);
}
調(diào)試過(guò)程中遇到了許多意外的錯(cuò)誤,如類型的不匹配帶來(lái)的計(jì)算錯(cuò)誤,如數(shù)字的舍入問(wèn)題;
在隊(duì)友的協(xié)助下,他負(fù)責(zé)審核和協(xié)助抓蟲子,我負(fù)責(zé)實(shí)施和編碼;
在最后一個(gè)環(huán)節(jié),對(duì)輸入值的測(cè)試中,我們很好的相互協(xié)助,分析不同的輸入情況,涵蓋了各種可能的意外,很快的完成了功能的完善;
下面是對(duì)輸入值的判斷是否允許的代碼 :
if (isNaN(theYear)|| theYear < 0) {
alert("輸入有誤,請(qǐng)重新輸入");
return ;
}
if((theMonth == 2 && theDay > 29 && isLeapYear(theYear))||(theMonth == 2 && theDay > 28 && !isLeapYear(theYear))) {
alert("輸入有誤,請(qǐng)重新輸入");
return ;
}
if((theMonth == 4 || theMonth == 6 || theMonth == 9 || theMonth == 11) && theDay == 31 ) {
alert("輸入有誤,請(qǐng)重新輸入");
return ;
}
相關(guān)文章
國(guó)內(nèi)常用的js類庫(kù)大全(CDN公共庫(kù))
羅列這類js類庫(kù)希望能幫助到大家,下面類庫(kù)都支持CDN,所以不用擔(dān)心速度問(wèn)題,就算某個(gè)節(jié)點(diǎn)慢也不會(huì)影響全國(guó)其他地區(qū)的訪問(wèn)速度,支持jQuery,Bootstrap,angular,zepto等js庫(kù)的CDN地址2020-06-06JavaScript DOM 學(xué)習(xí)第五章 表單簡(jiǎn)介
在這一章我主要介紹一些用來(lái)檢測(cè)用戶輸入的代碼,利用這些代碼,你也可以寫一些自己的檢測(cè)函數(shù)。2010-02-02Js從頭學(xué)起(基本數(shù)據(jù)類型和引用類型的參數(shù)傳遞詳細(xì)分析)
Js中所有函數(shù)的參數(shù)傳遞都是按值傳遞的,也就是把函數(shù)外面的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。下面舉幾個(gè)特別的例子2012-02-02JavaScript中Number.NEGATIVE_INFINITY值的使用詳解
這篇文章主要介紹了JavaScript中Number.NEGATIVE_INFINITY值的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06判斷js中各種數(shù)據(jù)的類型方法之typeof與0bject.prototype.toString講解
提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大寫,像JSON這種甚至都是大寫,所以,大家判斷的時(shí)候可以都轉(zhuǎn)換成小寫,以防出錯(cuò)2013-11-11讓ie運(yùn)行js時(shí)提示允許阻止內(nèi)容運(yùn)行的解決方法
這個(gè)問(wèn)題一般是因?yàn)榫W(wǎng)頁(yè)中使用了一些js代碼,而ie的默認(rèn)安全級(jí)別過(guò)高導(dǎo)致運(yùn)行js時(shí)需要經(jīng)過(guò)準(zhǔn)許才可以。下面是IE的設(shè)置方法。2010-10-10總結(jié)js函數(shù)相關(guān)知識(shí)點(diǎn)
本篇文章給大家簡(jiǎn)要分析了JS中函數(shù)相關(guān)的重要知識(shí)點(diǎn),對(duì)此有興趣的朋友可以參考學(xué)習(xí)下。2018-02-02ECMAScript 5嚴(yán)格模式(Strict Mode)介紹
這篇文章主要介紹了ECMAScript 5嚴(yán)格模式(Strict Mode)介紹,本文講解了如何啟用嚴(yán)格模式、啟用嚴(yán)格模式后對(duì)變量和屬性、函數(shù)、with語(yǔ)句的影響,需要的朋友可以參考下2015-03-03