Skip to content

Instantly share code, notes, and snippets.

@Santoshah
Created February 7, 2016 05:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Santoshah/d6f76e9837ac76eb1816 to your computer and use it in GitHub Desktop.
Save Santoshah/d6f76e9837ac76eb1816 to your computer and use it in GitHub Desktop.
Calendar
<div class="calendar-wrapper">
<button id="btnPrev" type="button">Prev</button>
<button id="btnNext" type="button">Next</button>
<div id="divCal"></div>
</div>
var Cal = function(divId) {
//Store div id
this.divId = divId;
// Days of week, starting on Sunday
this.DaysOfWeek = [
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
];
// Months, stating on January
this.Months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ];
// Set the current month, year
var d = new Date();
this.currMonth = d.getMonth();
this.currYear = d.getFullYear();
this.currDay = d.getDate();
};
// Goes to next month
Cal.prototype.nextMonth = function() {
if ( this.currMonth == 11 ) {
this.currMonth = 0;
this.currYear = this.currYear + 1;
}
else {
this.currMonth = this.currMonth + 1;
}
this.showcurr();
};
// Goes to previous month
Cal.prototype.previousMonth = function() {
if ( this.currMonth == 0 ) {
this.currMonth = 11;
this.currYear = this.currYear - 1;
}
else {
this.currMonth = this.currMonth - 1;
}
this.showcurr();
};
// Show current month
Cal.prototype.showcurr = function() {
this.showMonth(this.currYear, this.currMonth);
};
// Show month (year, month)
Cal.prototype.showMonth = function(y, m) {
var d = new Date()
// First day of the week in the selected month
, firstDayOfMonth = new Date(y, m, 1).getDay()
// Last day of the selected month
, lastDateOfMonth = new Date(y, m+1, 0).getDate()
// Last day of the previous month
, lastDayOfLastMonth = m == 0 ? new Date(y-1, 11, 0).getDate() : new Date(y, m, 0).getDate();
var html = '<table>';
// Write selected month and year
html += '<thead><tr>';
html += '<td colspan="7">' + this.Months[m] + ' ' + y + '</td>';
html += '</tr></thead>';
// Write the header of the days of the week
html += '<tr class="days">';
for(var i=0; i < this.DaysOfWeek.length;i++) {
html += '<td>' + this.DaysOfWeek[i] + '</td>';
}
html += '</tr>';
// Write the days
var i=1;
do {
var dow = new Date(y, m, i).getDay();
// If Sunday, start new row
if ( dow == 0 ) {
html += '<tr>';
}
// If not Sunday but first day of the month
// it will write the last days from the previous month
else if ( i == 1 ) {
html += '<tr>';
var k = lastDayOfLastMonth - firstDayOfMonth+1;
for(var j=0; j < firstDayOfMonth; j++) {
html += '<td class="not-current">' + k + '</td>';
k++;
}
}
// Write the current day in the loop
var chk = new Date();
var chkY = chk.getFullYear();
var chkM = chk.getMonth();
if (chkY == this.currYear && chkM == this.currMonth && i == this.currDay) {
html += '<td class="today">' + i + '</td>';
} else {
html += '<td class="normal">' + i + '</td>';
}
// If Saturday, closes the row
if ( dow == 6 ) {
html += '</tr>';
}
// If not Saturday, but last day of the selected month
// it will write the next few days from the next month
else if ( i == lastDateOfMonth ) {
var k=1;
for(dow; dow < 6; dow++) {
html += '<td class="not-current">' + k + '</td>';
k++;
}
}
i++;
}while(i <= lastDateOfMonth);
// Closes table
html += '</table>';
// Write HTML to the div
document.getElementById(this.divId).innerHTML = html;
};
// On Load of the window
window.onload = function() {
// Start calendar
var c = new Cal("divCal");
c.showcurr();
// Bind next and previous button clicks
getId('btnNext').onclick = function() {
c.nextMonth();
};
getId('btnPrev').onclick = function() {
c.previousMonth();
};
}
// Get element by id
function getId(id) {
return document.getElementById(id);
}
@main-bg:rgb(40,40,59);
@calendar-border:rgb(220,220,255);
@calendar-bg:#fff;
@calendar-standout:rgb(40,40,59);
@calendar-color:#444;
@calendar-fade-color:#c0c0c0;
@body-color:#444;
html, body {
height:100%;
}
body {
font-size:100%;
line-height:1.5;
font-family: "Roboto Condensed", sans-serif;
background:@main-bg;
background-image:linear-gradient(@main-bg 0%, darken(@main-bg,12%) 100%);
color:@body-color;
}
*, *:before, *:after {
box-sizing:border-box;
}
.group {
&:after {
content: "";
display: table;
clear: both;
}
}
img {
max-width:100%;
height:auto;
vertical-align:baseline;
}
a {
text-decoration:none;
}
.max(@maxWidth;
@rules) {
@media only screen and (max-width: @maxWidth) {
@rules();
}
}
.min(@minWidth;
@rules) {
@media only screen and (min-width: @minWidth) {
@rules();
}
}
.calendar-wrapper {
width:360px;
margin:3em auto;
padding:2em;
border:1px solid @calendar-border;
border-radius:5px;
background:@calendar-bg;
}
table {
clear:both;
width:100%;
border:1px solid @calendar-border;
border-radius:3px;
border-collapse:collapse;
color:@calendar-color;
}
td {
height:48px;
text-align:center;
vertical-align:middle;
border-right:1px solid @calendar-border;
border-top:1px solid @calendar-border;
width:100% / 7;
}
td.not-current {
color:@calendar-fade-color;;
}
td.normal {}
td.today {
font-weight:700;
color:@calendar-standout;
font-size:1.5em;
}
thead td {
border:none;
color:@calendar-standout;
text-transform:uppercase;
font-size:1.5em;
}
#btnPrev {
float:left;
margin-bottom:20px;
&:before {
content:'\f104';
font-family:FontAwesome;
padding-right:4px;
}
}
#btnNext {
float:right;
margin-bottom:20px;
&:after {
content:'\f105';
font-family:FontAwesome;
padding-left:4px;
}
}
#btnPrev, #btnNext {
background:transparent;
border:none;
outline:none;
font-size:1em;
color:@calendar-fade-color;
cursor:pointer;
font-family:"Roboto Condensed", sans-serif;
text-transform:uppercase;
transition:all 0.3s ease;
&:hover {
color:@calendar-standout;
font-weight:bold;
}
}
<link href="//fonts.googleapis.com/css?family=Roboto:400|Roboto+Condensed:400|Fjalla+One:400" rel="stylesheet" />
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment