js实现日历简单算法

发布时间:2021-03-19 发布网站:前端之家 F2er.com
前端之家收集整理的这篇文章主要介绍了js实现日历简单算法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

日历在我们的生活中扮演着十分重要的角色,上班、上学、约会都离不开日历。每年新年开始,人们都要更换新的日历,你想知道未来一年的这么多天是怎么被确定下来的吗?为什么去年的国庆节是星期五而今年的国庆节是星期三?那就来研究一下日历算法吧。本文将介绍日历的编排规则,确定某日是星期几的计算方法,以及如何在计算机上打印某一年的年历。

代码实现:

/**

* 初始化当天的日历数据 (没有参数默认当天)

* @method

* @param {Date} date

* @param {Number} line 日历中显示几行

* @returns [[],[]]

*/

function initMonthCalendar(dates,line = 6) {

var date = new Date(dates); // 初始时间格式

var y = date.getFullYear();

var m = date.getMonth();

var days = new Date(y,m + 1,0).getDate(); // 获取这个月共有多少天

var firstDayWeek = new Date(y,m,1).getDay(); // 月份第一天星期几

var arr = []; // 存储日历格式的数组

var n = []; // 日历格式中的一行

var d = 1; // 日历格式中的天数

// 先根据这个月第一天排星期几

// 把上个月剩下几天留在这个月的'奸细'放在最前头

for(let i = 0; i < firstDayWeek; i++) {

// new Date(2020,8,0) --> 9月没有0号 === 8月3127 n.unshift(getDate(y,0 - i).getDate());

}

// 开启循环

// 一星期占一行,一行一个外循环

// 这里我默认想要6行

for (let j = 0; j < line; j++) {

// 一天占一个格子,最多一星期7个格子

// 这里我想要7个格子

for (let i = 0; i < 7; i++) {

if(d > days) {

// 这个月都放完了,该放什么?

// new Date(2020,31) --> 9月没有31 === 10月1 n.push(new Date(y,d++).getDate());

} else {

// 放置这个月的天数 n.push(d++);

}51

if (n.length == 7) break; // 放了7个格子该结束了

}

arr.push(n);

n = []; // 这一行放完了,清空ba

}

return arr;

}

使用:

var calendar= initMonthCalendar('2020-09-19');

console.log(calendar);

// [

// [30,31,1,2,3,4,5]

// [6,7,9,10,11,12]

// [13,14,15,16,17,18,19]

// [20,21,22,23,24,25,26]

// [27,28,29,30,3]

// [4,5,6,10]

// ]

获取这一年的日历:

var arr = [];

var y = new Date().getFullYear();

for (let i = 0; i < 12; i++) {

const d = '' + y + '-0' + (i + 1) + '-01';

arr.push(initMonthCalendar(d))

}

console.log(arr)

总结


以上是前端之家为你收集整理的js实现日历简单算法全部内容,希望文章能够帮你解决js实现日历简单算法所遇到的程序开发问题。

如果觉得前端之家网站内容还不错,欢迎将前端之家网站推荐给前端开发程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。