本文要為大家介紹JavaScript實現每日簽到功能,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。
先看一下效果圖:
var calUtil = { getDaysInmonth : function(iMonth, iYear){ //当前年月的总天数 var dPrevDate = new Date(iYear, iMonth, 0); return dPrevDate.getDate(); }, bulidCal : function(iYear, iMonth) { //构建当前年月对应的日历 var aMonth = new Array(); aMonth[0] = new Array(7); aMonth[1] = new Array(7); aMonth[2] = new Array(7); aMonth[3] = new Array(7); aMonth[4] = new Array(7); aMonth[5] = new Array(7); aMonth[6] = new Array(7); var dCalDate = new Date(iYear, iMonth - 1, 1); var iDayOfFirst = dCalDate.getDay(); var iDaysInMonth = calUtil.getDaysInmonth(iMonth, iYear); var iVarDate = 1; var d, w; aMonth[0][0] = "日"; aMonth[0][1] = "一"; aMonth[0][2] = "二"; aMonth[0][3] = "三"; aMonth[0][4] = "四"; aMonth[0][5] = "五"; aMonth[0][6] = "六"; for (d = iDayOfFirst; d < 7; d++) { aMonth[1][d] = iVarDate; iVarDate++; } for (w = 2; w < 7; w++) { for (d = 0; d < 7; d++) { if (iVarDate <= iDaysInMonth) { aMonth[w][d] = iVarDate; iVarDate++; } } } return aMonth; }, ifHasSigned : function(signList,day){ var signed = false; $.each(signList,function(index,item){ var date = new Date(item.signDate); if(date.getDate() == day) { signed = true; return false; } }); return signed ; }, drawCal : function(iYear, iMonth ,signList) { var currentYearMonth = iYear+"年"+iMonth+"月"; var myMonth = calUtil.bulidCal(iYear, iMonth); var htmls = new Array(); htmls.push("<p class='sign_main' id='sign_layer'>"); htmls.push("<p class='sign_succ_calendar_title'>"); htmls.push("<p class='calendar_month_span'>"+currentYearMonth+"</p>"); htmls.push("</p>"); htmls.push("<p class='sign' id='sign_cal'>"); htmls.push("<table class='table'>"); htmls.push("<tr>"); htmls.push("<th>" + myMonth[0][0] + "</th>"); htmls.push("<th>" + myMonth[0][1] + "</th>"); htmls.push("<th>" + myMonth[0][2] + "</th>"); htmls.push("<th>" + myMonth[0][3] + "</th>"); htmls.push("<th>" + myMonth[0][4] + "</th>"); htmls.push("<th>" + myMonth[0][5] + "</th>"); htmls.push("<th>" + myMonth[0][6] + "</th>"); htmls.push("</tr>"); var d, w; for (w = 1; w < 7; w++) { htmls.push("<tr>"); for (d = 0; d < 7; d++) { var ifHasSigned = calUtil.ifHasSigned(signList,myMonth[w][d]); if(ifHasSigned){ htmls.push("<td class='on'>" + (!isNaN(myMonth[w][d]) ? myMonth[w][d] : " ") + "</td>"); } else { htmls.push("<td>" + (!isNaN(myMonth[w][d]) ? myMonth[w][d] : " ") + "</td>"); } } htmls.push("</tr>"); } htmls.push("</table>"); htmls.push("</p>"); htmls.push("</p>"); return htmls.join(''); } };
頁面效果程式碼:
<style type="text/css"> @media screen and (min-width:1024px) { .rich_media { width: 500px; margin-left: auto; margin-right: auto; padding: 20px; } } </style> </head> <body style="background-color: #fff;"> <p class="rich_media"> <p id="page-content"> <p style="text-align: center;background-color: #2FAA00;height: 50px;margin-bottom: 20px;"> <span style="cursor: pointer;font-weight: 600;font-size: 20px;color: #fff;height: 50px;line-height: 50px;">每日签到</span> <input type="hidden" id="userId" value="${user.id }" /> </p> <p class="container-fluid"> <p class="row-fluid" id="calendar"> </p> <p id="btnp" style="display: none;"> <p class="row-fluid text-center"> <span id="sing_for_number" class="btn btn-default">签到</span> </p> </p> </p> </p> </p> </body>
js呼叫方法
var str = calUtil.drawCal(current.getFullYear(),current.getMonth() + 1,signList); $("#calendar").html(str);
說明:signList是後台查詢的已簽到的時間集合,傳入到js方法中會去判斷哪一天簽到了,然後改變簽到天的顯示效果,如上圖!
此簽到頁面同樣適應手機瀏覽器喲!
提要:
本文以寫當前時間環境下當月的日曆表為例,用最簡單的方法實作JavaScript日曆,旨在展示JS世界中實用為本、簡單為上的解決問題的思路。
Web頁中的行事曆一般離不開表格,通常都會使用表格來裝載指定月的日期等資訊。所以,要寫JS日曆,首先必須解決的問題是表格的行與列問題。列是固定的,七列,因為一週有七天。行需要動態計算,因為,每一個月的第一天是星期幾是一個變數,因而第一天在表格中的第幾個單元也就跟著變化,同時,每個月的總天數不一致也影響著各個月對表格行數的需要量。
一.表格的行數問題
1.首先取得處理月的總天數
JS不提供此參數,我們需要計算。考慮到閏年問題會影響二月的天數,我們先寫一個判斷閏年的自編函數:
function is_leap(year) { return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0)); }
接著定義一個包含十二個月在內的月份總天數的陣列:
m_days=new Array(31,28+is_leap(ynow),31,30,31,31,30,31,30,31,30,31);
m_days這個陣列裡,二月的天數已經加入閏年的資訊:28 is_leap(ynow)。陣列元素從0開始,剛好對應JS提供的Date函數所提供的getMonth回傳值,即0表示一月,1表示二月,2表示三月,依此類推。
這樣,各月總數可以這樣取得:m_days[x]。其中,x為0至11的自然數。
2.計算處理月第一天是星期幾
可以使用Date函數的getDay取得,傳回的值從0到6,0表示星期一,1表示星期二,2表示星期三,其餘依此類推。程式碼如下(假設要處理的時間為2008年3月):
n1str=new Date(2008,3,1); firstday=n1str.getDay();
有了月總天數和該月第一天是星期幾這兩個已知條件,就可以解決表格所需行數問題:(當月天數第一天是星期幾的數值)除以七。表格函數需要整數,因此,我們使用Math.ceil來處理:
tr_str=Math.ceil((m_days[mnow] + firstday)/7);
表格中的tr標籤實際上代表表格的行,因此變數tr_str是我們往下寫表格的重要依據。
二.列印日曆表格
可以使用兩個for語句巢狀起來實作:外層for語句寫行,內層for語句寫單元格。
for(i=0;i<tr_str>"); for(k=0;k"); } //外层for语句结束</tr_str>
單元格的自然序號是否代表有效日期非常關鍵,為此必須加入篩選機制:僅列印有效的日期。有效的日期大於0小於小於等於處理月的總天數。
三. 以下是完整的JS日曆程式碼:
function is_leap(year) { return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0)); } //是否为闰年var nstr=new Date(); //当前Date资讯var ynow=nstr.getFullYear(); //年份var mnow=nstr.getMonth(); //月份var dnow=nstr.getDate(); //今日日期var n1str=new Date(ynow,mnow,1); //当月第一天Date资讯var firstday=n1str.getDay(); //当月第一天星期几var m_days=new Array(31,28+is_leap(ynow),31,30,31,30,31,31,30,31,30,31); //各月份的总天数var tr_str=Math.ceil((m_days[mnow] + firstday)/7); //表格所需要行数//打印表格第一行(有星期标志)document.write ("
日 | 一 | 二 | 三 | 四 | 五 | 六 | " + date_str + " | ") : document.write ("" + date_str + " | "); } document.write(""); //表格的行结束} document.write("
總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多相關教學請造訪JavaScript影片教學!
相關推薦:
以上是JavaScript實現每日簽到功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器