首頁 web前端 js教程 js寫當天簡單日曆效果【實作程式碼】_javascript技巧

js寫當天簡單日曆效果【實作程式碼】_javascript技巧

May 16, 2016 pm 03:02 PM
js 日曆

之前一直很想用javascript寫一個行事曆,但是因為完全沒有好的思路, 所以遲遲沒有嘗試。最近在網路上剛好看到用javascript寫的簡單日曆的例子,程式碼量雖然不大, 但是我覺得很好地闡述了js日曆的實作原理。自己也嘗試著做了一下,收穫蠻大,掌握了基本的實現原理後,再想增加更多的功能,完全就可以自由發揮了,先在這裡分享一下吧,有興趣的可以試試!

一.表格行數問題

既然要顯示日期表格的話,首先得知道這個表格有多少行多少列,列數是已經確定的,從星期天(日曆上第1列是星期天)到星期六一共7列。在解決行數問題之前,還得先知道這個月的第1天是星期幾,因為每個月的1號並不都是從日曆上的星期天開始排的,可能1號是星期五,星期六也說不定,所以1號的左邊部分,就得用空白表格代替了。那麼要用多少個空表格代替呢,這裡就得用到getDay()方法了,該方法返回數組[0-6]中的一個數字,0代表星期天,1代表星期一,2代表星期二,以此類推。所以如果一個月的1號是星期五的話,那麼剛好左邊需要5個空白表格來代替。然後,假如一個月有31天,最後求的表格行數就是:

var tr_nums = Math.ceil((5 + 31)/7); 

當然,不是每個月都是31天,所以我們得創建一個包含12月份的數組,每個元素代表每個月份所包含的天數。但2月比較特殊,閏年的2月有29天,平年的2月份只有28天。所以,在創建數組之前,得先自己創建一個判斷閏年的函數:

//如果当前年份能被4整除但是不能被100整除或者能被400整除,即可确定为闰年,返回1,否则返回0
function isLeap(year) {
 return year % 4 == 0 ? (year % 100 != 0 ? 1 : (year % 400 == 0 ? 1 : 0)) : 0;
}
登入後複製

然後我們建立一個月份數組:

var days_per_month = new Array(31, 28 + isLeap(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
登入後複製

 這樣就能保證無論是平年或閏年都會取出正確的天數,以下的程式碼用來取得今天的相關資訊:

var today = new Date(),       //获取当前日期
  y = today.getFullYear(),     //获取日期中的年份
  m = today.getMonth(),      //获取日期中的月份(需要注意的是:月份是从0开始计算,获取的值比正常月份的值少1)
  d = today.getDate(),       //获取日期中的日(方便在建立日期表格时高亮显示当天)
  firstday = new Date(y, m, 1),  //获取当月的第一天
  dayOfWeek = firstday.getDay(),  //判断第一天是星期几(返回[0-6]中的一个,0代表星期天,1代表星期一,以此类推)
  days_per_month = new Array(31, 28 + isLeap(y), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), //创建月份数组
登入後複製

所以最後就可以取得當月所需表格的行數:

var str_nums = Math.ceil((dayOfWeek + days_per_month[m]) / 7); //确定日期表格所需的行数
登入後複製

二.列印日曆表格

   表格本身就是一個二維數組,所以讓for大師出來跑兩個循環就搞定啦,代碼如下:

for (i = 0; i < str_nums; i += 1) {   //第一层for循环创建tr标签
  document.write('<tr>');
  for (k = 0; k < 7; k++) {      //第二层for循环创建td标签
   var idx = 7 * i + k;        //为每个表格创建索引,从0开始
   var date = idx - dayOfWeek + 1;  //将当月的1号与星期进行匹配
   //do something else
  }
  document.write('</tr>');
  }
登入後複製

  三.附上完整的js日曆程式碼

<script>
  //判断当前年份是否是闰年(闰年2月份有29天,平年2月份只有28天)
  function isLeap(year) {
  return year % 4 == 0 &#63; (year % 100 != 0 &#63; 1 : (year % 400 == 0 &#63; 1 : 0)) : 0;
  }
  var i, k,
  today = new Date(),                 //获取当前日期
  y = today.getFullYear(),              //获取日期中的年份
  m = today.getMonth(),                //获取日期中的月份(需要注意的是:月份是从0开始计算,获取的值比正常月份的值少1)
  d = today.getDate(),                //获取日期中的日(方便在建立日期表格时高亮显示当天)
  firstday = new Date(y, m, 1),            //获取当月的第一天
  dayOfWeek = firstday.getDay(),           //判断第一天是星期几(返回[0-6]中的一个,0代表星期天,1代表星期一,以此类推)
  days_per_month = new Array(31, 28 + isLeap(y), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),         //创建月份数组
  str_nums = Math.ceil((dayOfWeek + days_per_month[m]) / 7);                        //确定日期表格所需的行数
  document.write("<table cellspacing='0'><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>"); //打印表格第一行(显示星期)
  for (i = 0; i < str_nums; i += 1) {         //二维数组创建日期表格
  document.write('<tr>');
  for (k = 0; k < 7; k++) {
   var idx = 7 * i + k;                //为每个表格创建索引,从0开始
   var date = idx - dayOfWeek + 1;          //将当月的1号与星期进行匹配
   (date <= 0 || date > days_per_month[m]) &#63; date = ' ': date = idx - dayOfWeek + 1;  //索引小于等于0或者大于月份最大值就用空表格代替
   date == d &#63; document.write('<td class="today">' + date + '</td>') : document.write('<td>' + date + '</td>');  //高亮显示当天
  }
  document.write('</tr>');
  }
  document.write('</table>');
 </script>
登入後複製

css部分大家就自由發揮吧,目前時間是2016年5月2號,效果圖如下:

以上這篇js編寫當天簡單日曆效果【實現程式碼】就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win11雙螢幕行事曆在第二台顯示器上不存在怎麼辦? win11雙螢幕行事曆在第二台顯示器上不存在怎麼辦? Jun 12, 2024 pm 05:47 PM

在Windows11中組織日常工作和例行公事的重要工具是在工作列中顯示時間和日期。此功能通常位於螢幕的右下角,可讓您即時存取時間和日期。透過點擊此區域,您可以調出日曆,從而更輕鬆地檢查即將到來的約會和日期,而無需打開單獨的應用程式。但是,如果您使用多個顯示器,則此功能可能會遇到問題。具體來說,雖然時鐘和日期顯示在所有連接的顯示器上的任務欄上,但點擊第二個顯示器上的日期和時間來顯示日曆的功能不可用。截至目前,此功能僅在主顯示幕上起作用-它與Windows10不同,在Windows10中,按一下任

win10日曆顯示週數 win10日曆顯示週數 Jan 04, 2024 am 08:41 AM

很多用戶想要透過win10日曆這個工具來查看當前天數,但是日曆不會自動顯示這一功能,其實我們只需要通過簡單的設置,就能夠看到今年的累計週數了哦~win10日曆顯示週數設定教學:1、在桌面左下角的搜尋中輸入日曆並且開啟應用程式。 2.在開啟的日曆應用程式中,點擊左下角的「齒輪」圖示後,會在右側彈出設置,我們點擊「日曆設定」3、繼續在開啟的日曆設定中,找到「週數」然後將週數選項調整到“一年中的第一天”即可。 4.在完成以上設定後,點擊「週」即可看到今年的周數統計了。

Outlook行事曆不同步; Outlook行事曆不同步; Mar 26, 2024 am 09:36 AM

如果您的Outlook行事曆無法與Google行事曆、Teams、iPhone、Android、Zoom、Office帳號等同步,請執行下列步驟來解決問題。日曆應用程式可以連接到其他日曆服務,例如Google日曆、iPhone、安卓、微軟Office365等,這是非常有用的,因為它可以自動同步。但如果OutlookCalendar無法與第三方日曆同步怎麼辦?可能的原因可能是選擇錯誤的日曆進行同步,日曆不可見,後台應用程序幹擾,過時的Outlook應用程序或日曆應用程序,等等。修復Outlook日曆不同步的初步

無法開啟win10右下角的行事曆 無法開啟win10右下角的行事曆 Dec 26, 2023 pm 05:07 PM

有使用win0系統的小夥伴有遇見win10日曆打不開的情況,這個是正常的電腦的小故障而已,在win10系統的隱私設定裡可以解決,今天小編帶來了詳細的解決方法,下面大家一起來看看吧。 win10右下角的行事曆打不開解決方法1、在win10系統中點選開始→點擊上方的程式清單按鈕→往下找到拼音(中文)R→行事曆2、初次使用,可能新事件會點不開(滑鼠靠上去,不會有選取的深藍色),可以在隱私中設定一下。點擊桌面左上方的三道槓圖示→底部就會有設定選單;3、在彈出的介面中點擊隱私;4、如果之前使用過設置,可以點擊左

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

win10日曆事件沒有彈跳窗提醒怎麼辦?win10日曆事件提醒沒了的恢復方法 win10日曆事件沒有彈跳窗提醒怎麼辦?win10日曆事件提醒沒了的恢復方法 Jun 09, 2024 pm 02:52 PM

行事曆可以幫助使用者記錄你的行程,甚至可以設定提醒,但是也有不少的使用者在詢問win10行事曆事件提醒不彈出怎麼辦?使用者可以先檢查windows更新狀況或是清除windows應用程式商店快取來進行操作就可以了。以下就讓本站來為使用者來仔細的介紹一下win10日曆事件提醒不彈出問題解析吧。新增日曆事件在系統選單中點選「日曆」程式。滑鼠左鍵點擊日曆中的日期。在編輯視窗輸入事件名稱和提醒時間,點選「儲存」按鈕即可新增事件了。 win10日曆事件提醒不彈出問題解決

無期迷途採購辦:日曆和生日系列週邊上新! 無期迷途採購辦:日曆和生日系列週邊上新! Feb 29, 2024 pm 12:00 PM

無期迷途採購辦確定將於2月28日上午11點更新,玩家可以前往淘寶搜尋無期迷途採購辦選擇店鋪分類進行購買,本次為大家帶來的是MBCC生日會系列及2024台歷週邊,一起來看看本次的商品詳情。無期迷途採購辦:日曆和生日系列週邊上新!無期迷途採購辦上新! —預售時間:2024年2月28日11:00-2024年3月13日23:59採購地​​址:淘寶搜尋【無期迷途採購辦】選擇【店鋪】分類即可進店採購;週邊介紹:本次週邊上新為MBCC生日會系列及2024台歷週邊,請點選長圖查閱詳情。採購辦上新周邊介紹—MBCC生

如何使用PHP和JS創建股票蠟燭圖 如何使用PHP和JS創建股票蠟燭圖 Dec 17, 2023 am 08:08 AM

如何使用PHP和JS創建股票蠟燭圖股票蠟燭圖是股票市場中常見的技術分析圖形,透過繪製股票的開盤價、收盤價、最高價和最低價等數據,幫助投資者更直觀地了解股票的價格波動情形。本文將教你如何使用PHP和JS創建股票蠟燭圖,並附上具體的程式碼範例。一、準備工作在開始之前,我們需要準備以下環境:1.一台運行PHP的伺服器2.一個支援HTML5和Canvas的瀏覽器3

See all articles