Skip to content

Instantly share code, notes, and snippets.

@bbarry
Created January 25, 2013 20:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbarry/4637413 to your computer and use it in GitHub Desktop.
Save bbarry/4637413 to your computer and use it in GitHub Desktop.
// Calendar
function calendar(d) {
$("#calendar").remove();
$("#calendar_container").append("<table border='1' id='calendar'></table>");
t = new Date(d); // Today [Wed Jan 16 2013 00:00:00 GMT-0500 (EST)]
var d = t.getDate(); // Today's date (1-31) [16]
var y = t.getFullYear(); // Full year [2013]
var m = t.getMonth(); // Month (0-11) [0]
var mN = ["January", // Month name array (0-11)
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"];
var fM = mN[m]; // Full month name [January]
var dIM = new Date(y, m + 1, 0).getDate(); // Number of days in current month (1-31) [31]
var dILM = new Date(y, m, 0).getDate(); // Number of days in last month (1-31) [31]
var dOW = new Date(y, m, 1).getDay(); // Day of the first day of the month (0-6) [2]
var nOW = Math.ceil((dIM + dOW) / 7); // Number of weeks in the month, including space [5]
var w = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
function datDate(m, day, y) {
date = new Date(" " + mN[m] + " " + day + " " + y);
return date;
}
$("#calendar").append("<tr><td class='month' colspan='7'>" + mN[m] + " - " + y + "</td></tr>");
$("#calendar").append("<tr class='day'></tr>");
for (var i = 0; i < 7; i++) $(".day").append("<td>" + w[i][0] + "</td>");
if (m === 0) {
n_m = 12;
} else {
n_m = m - 1;
}
var pre = new Date(y - 1, n_m + 1, 0).getDate();
var daysInLastMonth = new Date(y, n_m + 1, 0).getDate();
var after = (7 * (nOW)) - (dOW + dIM);
var count = 0,
$row;
for (var i = 0 - dOW; i < dIM; i++) {
var day = i + 1;
if (count % 7 === 0) {
$row = $("<tr class='row'>").appendTo("#calendar");
}
if (day > 0) {
date = datDate(m, day, y);
if (day === d) {
$row.append("<td class='calendar_date current_date watch' data-date='" + date + "'>" + day + "</td>");
} else {
$row.append("<td class='calendar_date watch' data-date='" + date + "'>" + day + "</td>");
}
} else {
var day = daysInLastMonth--;
if (m === 0) {
var n_y = y - 1;
var n_m = 11
} else {
var n_m = m - 1;
var n_y = y;
}
var n_date = new Date(n_y, n_m, day);
$row.prepend("<td class='calendar_back watch' data-date='" + n_date + "'>" + day + "</td>");
}
count++;
}
for (var i = 0; i < after; i++) {
var day = (i + 1);
if (m === 12) {
var n_y = y + 1;
var n_m = 0
} else {
var n_m = m + 1;
var n_y = y;
}
var n_date = new Date(n_y, n_m, day);
$("td:last").after("<td class='calendar_next watch' data-date='" + n_date + "'>" + day + "</td>");
}
}
function calendarSetup() {
function changed(c) {
$(".current").text(c);
localStorage.setItem("date", c);
b_current = new Date(c);
b_year = b_current.getFullYear();
b_month = b_current.getMonth();
b_date = b_current.getDate();
b_daysInLastMonth = new Date(b_year, b_month, 1).getDate();
}
if (localStorage.getItem("date")) {
var now = localStorage.getItem("date");
} else {
localStorage.setItem("date", new Date());
var now = new Date(); // "1 March 2013"
}
calendar(now);
changed(localStorage.getItem("date"));
b_current = new Date(now);
b_year = b_current.getFullYear();
b_month = b_current.getMonth();
b_date = b_current.getDate();
b_daysInLastMonth = new Date(b_year, b_month, 1).getDate();
b_monthNames = ["January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"];
function move(a, b, c) {
if (b_month === a) {
var year = b_year + b;
var month = c;
a === 11 ? day = 1 : day = new Date(year, month + 1, 0).getDate();
} else {
var year = b_year;
var month = b_month + b;
a === 11 ? day = 1 : day = new Date(year, month + 1, 0).getDate();
}
var now = new Date(year, month, day);
calendar(now);
changed(now);
}
function step(a, b, c) {
var year = b_year;
var day = b_date + b;
var month = b_month;
var now = new Date(year, month, day);
calendar(now);
changed(now);
}
$(".watch").live("click", function () {
if ($(this).hasClass("back")) {
move(0, -1, 11);
}
if ($(this).hasClass("next")) {
move(11, 1, 0);
}
if ($(this).hasClass("calendar_back")) {
var now = $(this).data("date");
calendar(now);
changed(now);
}
if ($(this).hasClass("calendar_next")) {
var b_now = $(this).data("date");
calendar(b_now);
changed(b_now);
}
if ($(this).hasClass("calendar_date")) {
var b_now = $(this).data("date");
calendar(b_now);
changed(b_now);
}
if ($(this).hasClass("today")) {
var b_now = new Date();
calendar(b_now);
changed(b_now);
}
});
$(document).keydown(function (e) {
if (e.keyCode == 37) {
step(0, -1, 11);
}
if (e.keyCode == 39) {
step(11, 1, 1);
}
});
}
// Onload
calendarSetup();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment