date preset widget

easily select some comment date ranges

by Jason Crowther

HTML

<p>
<label for="datePreset">Date Preset</label>
<select id ="datePreset">
  <option value="">--</option>
   <option value="thisMonth">This Month</option>
   <option value="lastMonth">Last Month</option>
   <option value="thisQuarter">This Quarter</option>
   <option value="lastQuarter">Last Quarter</option>
   <option value="thisYear">This Year</option>
   <option value="lastYear">Last Year</option>
</select>
</p>

<p>
  <label>From Date</label>
  <input type="text" id="fromDate">
</p>

<p>
  <label>To Date</label>
  <input type="text" id="toDate">
</p>

CSS

label { display: block }

JavaScript

$(document).ready(function(){
	datePreset.init({
  	selectField: $('#datePreset'),
    fromField: $('#fromDate'),
    toField: $('#toDate')
  });
})

var datePreset = {
	init : function(args) {
		this.selectField = args.selectField;
    this.selectField.change( $.proxy(this.changeHandler, this) );  
  	this.fromField = args.fromField;
    this.toField = args.toField;
  },

  currentDate : function(){
    var TodayDate=new Date();
    return [
    	TodayDate.getMonth()+1,
    	TodayDate.getDate(),
    	TodayDate.getFullYear()
    ];
	},
  
	changeHandler: function() {
 		var Today = this.currentDate();
    var TodayMonth=Today[0];
    var TodayDay=Today[1];
    var TodayYear=Today[2];
		this.toField.val(this.formatdate(TodayMonth,TodayDay,TodayYear));

  	var c = this.selectField.val();

		if( c == 'thisMonth') {
			this.fromField.val(this.formatdate(TodayMonth,1,TodayYear));
    } else if ( c == 'lastMonth' ) {
    	
      var lm = TodayMonth-1;
      var ly = TodayYear;
      
      if(TodayMonth == 1) {
      	lm = 12;
        ly = TodayYear - 1;
      }
      
      this.fromField.val(this.formatdate(lm,1,ly));
			this.toField.val(this.formatdate( lm,this.monthEndDay(lm,ly),ly ));

    } else if ( c == 'thisQuarter' ) {
      var q = this.findquarter(TodayMonth);
      this.fromField.val(this.formatdate(this.quarterstart(q),1,TodayYear));
    } else if ( c == 'lastQuarter' ) {
      var q = this.findquarter(TodayMonth);
      var r = this.lastquarter(q,TodayYear)
      var e = this.quarterend(r[0]);
      this.fromField.val(this.formatdate(this.quarterstart(r[0]),1,r[1]));
      this.toField.val(this.formatdate(e,this.monthEndDay(e,r[1]),r[1]));
    } else if ( c == 'thisYear' ) {
      this.fromField.val(this.formatdate(1,1,TodayYear));
    } else if ( c == 'lastYear' ) {
      var ly = TodayYear - 1;
      this.fromField.val(this.formatdate(1,1,ly));
      this.toField.val(this.formatdate(12,31,ly));
    } else if ( c == '') {
    	// do nothing for null...