Life Days Visualization

by paulftw

HTML

<script src="http://datejs.googlecode.com/files/date.js"></script>
<canvas id="myCanvas" width="320" height="400"></canvas>

CSS

#myCanvas {
    margin: 0;
    padding: 0;
    width: 320px;
    height: 400px;
    //border: 1px solid #333;
}
body {
    margin: 0px;
    padding: 0px;
}

JavaScript

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var ctx = context;

var bdayCol = '#ffd700';
var yong = '#2c2';
var twfive = '#cfc';
var future = '#fff';
var past = '#ccc';
var endCol = '#111';
var spec = '#e44';

var age = 29.2 * 365;
var yOfs = 0;

var edge = 2;
var row = 320 / edge;
var step = {days: 1};


var bdYear = 1982;
var bdDay = 'Oct 1 ';

var start = new Date(bdDay + bdYear);

var bday = function(y) {
    var x = new Date(bdDay + (y+bdYear));
    return x;
}

var maxAge = 76.4;
var end = bday(maxAge);

var drawDay = function(i, color) {
    if (!!color) {
        ctx.fillStyle = color;
    }
    var x = i % row;
    var y = i / row;

    ctx.fillRect(x*edge, y*edge + yOfs, edge, edge);
};

var cur = new Date(start);
var today = new Date();

for (var i=0, cur = new Date(start); cur < bday(maxAge + 50); i++, cur.add(step)) {
    if (cur < today) {
        drawDay(i, past);
    } else if (cur < end){
        drawDay(i, future);
    } else {
        drawDay(i, endCol);
    }
}
    
for (var i = 0; i < maxAge; i++) {
    var b = bday(i);
    //drawDay((b-start)/3600/24/1000/7, bdayCol);
}

for (var i = 10; i < maxAge+10; i+=10) {
    var b = bday(i);
    drawDay((b-start)/3600/24/1000, spec);
}