Created
January 25, 2013 20:07
-
-
Save bbarry/4637413 to your computer and use it in GitHub Desktop.
original from http://jsfiddle.net/charlescarver/XZE3x/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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