国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

親自動手實現(xiàn)vue日歷控件

2024-05-06 15:37:27
字體:
供稿:網(wǎng)友

之前項目中有用到日歷控件,當時由于時間問題,是在網(wǎng)上找到一個demo,然后二次開發(fā)的,從那時就想著自己寫一個日歷控件。這篇文章說明日歷數(shù)據(jù)的處理,去除月份天數(shù)判斷以及是否閏年判斷。 

設計(以最常用的按月份的日歷)

日歷其實大家都很熟悉,一切的設計都是從功能出發(fā),這是根本。日歷的功能分為兩大塊。

日歷頭部:當前年份/月份。 日歷主體:當前月份的具體的日期信息。 日歷主體的行數(shù):現(xiàn)在我們看到的日歷基本上為6行,因為一個月最多為31天,假設當前月的第一天為上一月最后一周的最后一天。如果是五行數(shù)據(jù)的話則只顯示了29天,這也是為什么顯示6行數(shù)據(jù)的原因。

功能點

日歷初始渲染日期為當前月份 頭部的左右滑動,日歷數(shù)據(jù)需要顯示對應月份的信息 點擊日期本身可以進行相關(guān)數(shù)據(jù)操作,并且記錄操作內(nèi)容 可以根據(jù)調(diào)用這設置日歷的每周數(shù)據(jù)以星期*為開始,星期天或者星期一。

首先思考日歷的核心問題

如何獲取當前日期的年份以及月份

/** * 獲取日歷header內(nèi)容 格式為:****年 **月 * @param {*} date */export const getHeaderContent = function (date) { let _date = new Date(date)  return dateFormat(_date, 'yyyy年 MM月')}

如何獲取當前月份需要顯示的42條數(shù)據(jù)(6*7),這42條數(shù)據(jù)是什么呢?

這個問題的核心是:當前月份顯示的42條數(shù)據(jù)的第一天是哪一天?

這個問題的解決思路還要從上面的設計說起,上面提到日歷主題的行數(shù)時,說到“假設當前月的第一天為上一月最后一周的最后一天”,那么42條數(shù)據(jù)顯示的內(nèi)容的第一條數(shù)據(jù)還要根據(jù)當前月的第一天是第一天所在周的第幾天。

舉例:2019-02-01

2月的第一天,星期五,所以當前月日歷的第一天為2019-02-01 - 5

var date = new Date()date.setDate(date.getDate() - date.getDay() + 1) // 獲取當前月的第一天為2019-01-28

這里有一問題是什么呢?

date.getDate()的值為0 - 6(0為周日,如果你的日歷也是將周日放在日歷的第一天,沒什么問題,可是在中國是將周日放在最后一天的),這也就意味著前面的實現(xiàn)還需要考慮日歷的放置順序,因為日歷是按照普通的周一到周日,還是周日到周一,我們獲取的當月日歷的第一天是不同的。所以上面的代碼還要依賴于日歷的排放順序。

這里的排放順序?qū)⑹侨諝v組件的第一個可被調(diào)用者控制的參數(shù)。這里我的設想是將該參數(shù)的傳入值與date.getDay()匹配。

0:周日 1:周一 ..... 5:周五 6:周六

所以上面的公式為

date.setDate(date.getDate() - date.getDay() + x)

但是這里的x值加了之后的日期如果大于當前月份的第一天,那就需要將當前得到的日期數(shù)值再減去7天,這個原因就不用說明了吧。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 长岭县| 馆陶县| 红桥区| 临沧市| 喜德县| 县级市| 镇安县| 广西| 武隆县| 清涧县| 姚安县| 霍林郭勒市| 兴山县| 绩溪县| 沁阳市| 南宁市| 永修县| 安庆市| 沧州市| 奉节县| 新平| 双桥区| 喀什市| SHOW| 长宁区| 湖北省| 嘉义市| 河北区| 新营市| 丰台区| 滦南县| 萨嘎县| 永仁县| 永吉县| 德庆县| 太仆寺旗| 门源| 农安县| 新干县| 沈丘县| 怀化市|