在jquery和javascript中创建自定义日历背后的逻辑
Logic behind creating a custom calendar in jquery and javascript
我正试图了解日历背后的逻辑。目前,出于测试目的,我用计数器(1-31)显示了天数,但1从日历的左上角开始。我的问题是,我需要做什么来计算当前月份的天数并相应地显示该月份的天数。我已经包含了一些代码。
this.RenderCalendar = function () {
var date = new Date();
date = new Date(date.getYear(), date.getMonth(), 1);
month = date.getMonth();
var calendarHeader = $("<div class='"calHeader'"></div>");
var monthLabel = $("<label id='"calMonth'">" + FRAMEWORK.GetMonthString(month) + "</label>");
var yearLabel = $("<label id='"calYear'">" + date.getYear() + "</label>");
var nextMonth = $("<a href='"javascript:void(0);'" id='"nextMonth'" class='"newMonth nextMonth'" title='"Next Month'">>></a>");
var prevMonth = $("<a href='"javascript:void(0);'" id='"prevMonth'" class='"newMonth previousMonth'" title='"Previous Month'"><<</a>");
nextMonth.click(function () {
var oldTable = $(".calendarTableContainer table").first();
var newTable = FRAMEWORK.RenderCalendarTableMarkup(month + 1);
$(".calendarTableContainer").append(newTable);
$(".calendarTableContainer table").each(function () {
$(this).css("width", $(this).width() + "px");
});
$(".calendarTableContainer").css("width", ($(".calendarTableContainer table").outerWidth() * 2) + 25 + "px");
$(".calendarContainer").animate({
scrollLeft: $("div.calendarContainer").scrollLeft() + ($("div.calendarContainer table").next().width())
}, 500, function () {
$(".calendarTableContainer").css("width", "100%");
oldTable.remove();
$(".calendarTableContainer table").css("width", "100%");
});
var currentMonthIndex = $.inArray($("#calMonth").text(), months);
$("#calMonth").text(months[currentMonthIndex + 1]);
});
prevMonth.click(function () {
var oldTable = $(".calendarTableContainer table").first();
var newTable = FRAMEWORK.RenderCalendarTableMarkup(month - 1);
$(".calendarTableContainer").prepend(newTable);
$(".calendarTableContainer table").each(function () {
$(this).css("width", $(this).width() + "px");
});
$(".calendarTableContainer").css("width", ($(".calendarTableContainer table").outerWidth() * 2) + 25 + "px");
$(".calendarContainer").scrollLeft(oldTable.outerWidth());
$(".calendarContainer").animate({
scrollLeft: $("div.calendarContainer").scrollLeft() - ($("div.calendarContainer table").next().width())
}, 500, function () {
$(".calendarTableContainer").css("width", "100%");
oldTable.remove();
$(".calendarTableContainer table").css("width", "100%");
});
var currentMonthIndex = $.inArray($("#calMonth").text(), months);
$("#calMonth").text(months[currentMonthIndex - 1]);
});
calendarHeader.append(nextMonth);
calendarHeader.append(prevMonth);
calendarHeader.append(monthLabel);
calendarHeader.append(yearLabel);
$("#detailsContainer").append(calendarHeader);
var calendarContainer = $("<div class='"calendarContainer'"></div>");
var calendarTableContainer = $("<div class='"calendarTableContainer'"></div>");
calendarContainer.append(calendarTableContainer);
$("#detailsContainer").append(calendarContainer);
$(".calendarTableContainer").append(FRAMEWORK.RenderCalendarTableMarkup());
/*var containerHeight = $("#detailsContainer").height();
calendarContainer.css("height", containerHeight);
var calendarHeight = calendarContainer.outerHeight();
var calHeaderHeight = calendarHeader.outerHeight();
var calDayOfWeekHeight = $("#trCalDayOfWeekHeader").outerHeight();
var remainingContainerHeight = calendarHeight - calHeaderHeight - calDayOfWeekHeight;
$(".calendarContainer tr.trCalWeek").each(function () {
$(this).css("height", remainingContainerHeight / weekCount);
});*/
};
this.RenderCalendarTableMarkup = function (newMonth) {
var calendarTable = $("<table id='"tabCalendar'" class='"tabCalendarContainer'" cellpadding='"0'" cellspacing='"0'" align='"center'"></table>");
var calendarDayOfWeekHeader = $("<tr id='"trCalDayOfWeekHeader'" class='"trCalDayOfWeek'"></tr>");
for (var day = 0; day < days.length; day++) {
var dayOfWeek = $("<td id='"tdDayName-" + days[day] + "'">" + days[day] + "</td>");
calendarDayOfWeekHeader.append(dayOfWeek);
};
calendarDayOfWeekHeader.find("td").each(function () {
$(this).css("width", 100 / 7 + "%");
});
calendarDayOfWeekHeader.find("td:last").css("border-right", "none");
calendarTable.append(calendarDayOfWeekHeader);
weekCount = FRAMEWORK.CountWeeksOfMonth(new Date().getDate(), month, new Date().getYear());
var dayCount = 1;
for (var week = 1; week <= weekCount; week++) {
var calendarWeek = $("<tr id='"trWeek-" + week + "'" class='"trCalWeek'"></tr>");
for (var day = 0; day < 7; day++) {
var calendarDay = $("<td id='"tdDay-" + dayCount + "'"><label>" + dayCount + "</label></td>");
calendarWeek.append(calendarDay);
if (dayCount <= 30) {
dayCount++;
}
else { dayCount = 1; }
};
calendarWeek.find("td:last").css("border-right", "none");
calendarTable.append(calendarWeek);
};
return calendarTable;
};
在dom上调用RenderCalendar()
。在RenderCalendar中,我有下个月和上个月按钮,它们将使用RenderCalendarTableMarkup(),
进行相应的导航,计算天数并相应地显示。
请帮忙吗?
为什么要自己计算呢。退房http://momentjs.com/
相关文章:
- JavaScript打印功能使日历停止工作
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 代码背后调用一个JavaScript函数的按钮点击-C#
- primefaces日历可以禁用过去的日期和时间吗
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 如何在谷歌日历图表中使用布尔型列
- 如何从C#代码背后调用本地存储的javascript函数
- Json在完整日历中对数据进行了编码
- 将到达日历中的2天添加到离开日历中
- 如何在下拉列表中选择完整的日历月份和年份
- 谷歌公共日历链接没有'不工作(完整日历)
- 使用AJAX将日期从SQL服务器传递到jQuery日历
- 为网站表单创建一个专业的日历
- 如何在完整日历中的当天点击时显示活动详细信息
- 如何使用角度材质日历
- javascript在代码背后的语法
- jQuery完整日历添加事件,仅包含月份和日期
- 从工作日结束到下一个工作日开始的完整日历JS包装时间
- 如何使用2个事件单击1个日历
- 在jquery和javascript中创建自定义日历背后的逻辑