Skip to content

Commit

Permalink
New methods: addYearsToDate and getDateDiff
Browse files Browse the repository at this point in the history
  • Loading branch information
brencon committed Aug 29, 2015
1 parent aaabda0 commit dc16a99
Show file tree
Hide file tree
Showing 8 changed files with 209 additions and 3 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,6 @@ build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules

# Test results
results.txt
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ This module was created out of a need to access a global library of JavaScript h
| Example | Returns |
| ------- | ------- |
| `intake.addLeadingZeros(1, 4)` | "0001" |
| `intake.addYearsToDate('9/1/2015', 10)` | "Mon Sep 01 2025 00:00:00 GMT-0700 (Pacific Daylight Time)" |
| `intake.formatSSN('123456789')` | "123-45-6789" |
| `intake.getDateDiff('1/1/2015', '1/2/2015', 1)` | 1 |
| `intake.isEmptyOrUndefined('')` | true |
| `intake.isNumeric('ABC')` | false
| `intake.toTitleCase('format this string to title case', true)` | "Format This String to Title Case" |
Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "intake",
"version": "0.2.5",
"version": "0.2.7",
"description": "JavaScript utilities and other helper methods for intake form applications.",
"main": "index.js",
"devDependencies": {
Expand Down
75 changes: 75 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,30 @@
};
// ****************************************************************************************************

// ****************************************************************************************************
// addYearsToDate
// ****************************************************************************************************
// args:
// dateToUpdate: the original date
// addYears: the number of years to add
// summary:
// expects a date and expects to add a number of years to that date and return it
// ****************************************************************************************************
Intake.prototype.addYearsToDate = function(dateToUpdate, addYears) {
if (isNaN(Date.parse(dateToUpdate))) {
return dateToUpdate;
}
else if (this.isEmptyOrUndefined(addYears)) {
return new Date(dateToUpdate);
}
else {
var d = new Date(dateToUpdate);
d.setFullYear(d.getFullYear() + addYears);
return d;
}
};
// ****************************************************************************************************

// formatSSN
// args: ssn
// summary: converts a string of numbers with a length of 9 characters to XXX-XX-XXXX format
Expand All @@ -52,11 +76,57 @@
}
};

// ****************************************************************************************************
// getDateDiff
// ****************************************************************************************************
// args:
// date1: a date
// date2: another date
// interval: the date-time interval to use in the comparison between date1 and date2
// summary:
// expects two dates and a value for interval to determine the return amount
// ****************************************************************************************************
Intake.prototype.getDateDiff = function(date1, date2, interval) {
var second = 1000;
var minute = second * 60;
var hour = minute * 60;
var day = hour * 24;
var week = day * 7;
date1 = new Date(date1);
date2 = new Date(date2);
var timeDiff = date2 - date1;
if (isNaN(timeDiff)) {
return NaN;
}
switch (interval) {
case 'years':
return date2.getFullYear() - date1.getFullYear();
case 'months':
return ((date2.getFullYear() * 12 + date2.getMonth()) - (date1.getFullYear() * 12 + date1.getMonth()));
case 'weeks':
return Math.floor(timeDiff / week);
case 'days':
return Math.floor(timeDiff / day);
case 'hours':
return Math.floor(timeDiff / hour);
case 'minutes':
return Math.floor(timeDiff / minute);
case 'seconds':
return Math.floor(timeDiff / second);
default:
return undefined;
}
};
// ****************************************************************************************************

// ****************************************************************************************************
// isEmptyOrUndefined
// ****************************************************************************************************
// args: obj
// summary: determines whether the object is undefined, null, or an empty string
// it assumes the consumer wants all cases of emptiness to be equal
// return: Boolean
// ****************************************************************************************************
Intake.prototype.isEmptyOrUndefined = function(obj) {
if ((obj === undefined) || (obj === null) || (typeof obj === undefined)) {
return true;
Expand All @@ -71,11 +141,15 @@
return false;
}
};
// ****************************************************************************************************

// ****************************************************************************************************
// isNumeric
// ****************************************************************************************************
// args: str
// summary: checks if a string is numeric
// return: Boolean
// ****************************************************************************************************
Intake.prototype.isNumeric = function(str) {
return !isNaN(parseFloat(str)) && isFinite(str);
};
Expand Down Expand Up @@ -114,6 +188,7 @@
return str;
}
};
// ****************************************************************************************************

// CommonJS module
if (typeof exports !== 'undefined') {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "intake",
"version": "0.2.5",
"version": "0.2.7",
"description": "JavaScript utilities and other helper methods for intake form applications.",
"main": "index.js",
"engines": {
Expand Down
21 changes: 20 additions & 1 deletion results.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,30 @@
  √ return string length paramater should be ignored if not a number
  √ if len is negative no leading zeros should be added

 #addYearsToDate
  √ add one year to a date
  √ add ten years to a date
  √ add minus one year to a date
  √ expect a non-date to return the same value
  √ expect a date without years to add to be the same date

 #formatSSN
  √ nine-character string of numbers should be XXX-XX-XXXX
  √ string with letters will not be formatted to SSN
  √ string already formatted as SSN will not change

 #getDateDiff
  √ return one second difference between two dates
  √ return negative one second difference between two dates
  √ return one minute difference between two dates
  √ return one hour difference between two dates
  √ return one day difference between two dates
  √ return one week difference between two dates
  √ return one month difference between two dates
  √ return one year difference between two dates
  √ return undefined if interval is unknown
  √ return NaN if one or both of the dates are not a date

 #isEmptyOrUndefined
  √ object should be undefined
  √ object should be empty
Expand Down Expand Up @@ -55,5 +74,5 @@
  √ Undefined is ignored


  42 passing (82ms)
  57 passing (110ms)

36 changes: 36 additions & 0 deletions test/test-add-years-to-date.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(function () {
'use strict';

var expect = require('chai').expect;
var Intake = require('../index');
var intake = new Intake();

describe('#addYearsToDate', function() {
it('add one year to a date', function() {
var date = '1/1/2015';
var result = intake.addYearsToDate(date, 1);
expect(result.toLocaleDateString("en-US")).to.equal('1/1/2016');
});
it('add ten years to a date', function() {
var date = '9/1/2015';
var result = intake.addYearsToDate(date, 10);
expect(result.toLocaleDateString("en-US")).to.equal('9/1/2025');
});
it('add minus one year to a date', function() {
var date = '1/1/2015';
var result = intake.addYearsToDate(date, -1);
expect(result.toLocaleDateString("en-US")).to.equal('1/1/2014');
});
it('expect a non-date to return the same value', function() {
var date = 'test';
var result = intake.addYearsToDate(date, 1);
expect(result).to.equal('test');
});
it('expect a date without years to add to be the same date', function() {
var date = '9/1/2015';
var result = intake.addYearsToDate(date);
expect(result.toLocaleDateString("en-US")).to.equal('9/1/2015');
});
});

}());
71 changes: 71 additions & 0 deletions test/test-get-date-diff.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
(function () {
'use strict';

var expect = require('chai').expect;
var Intake = require('../index');
var intake = new Intake();

describe('#getDateDiff', function() {
it('return one second difference between two dates', function() {
var d1 = new Date('2015', '9', '1', '10', '15', '30', '0');
var d2 = new Date('2015', '9', '1', '10', '15', '31', '0');
var result = intake.getDateDiff(d1, d2, 'seconds');
expect(result).to.equal(1);
});
it('return negative one second difference between two dates', function() {
var d1 = new Date('2015', '9', '1', '10', '15', '31', '0');
var d2 = new Date('2015', '9', '1', '10', '15', '30', '0');
var result = intake.getDateDiff(d1, d2, 'seconds');
expect(result).to.equal(-1);
});
it('return one minute difference between two dates', function() {
var d1 = new Date('2015', '9', '1', '10', '15', '30', '0');
var d2 = new Date('2015', '9', '1', '10', '16', '30', '0');
var result = intake.getDateDiff(d1, d2, 'minutes');
expect(result).to.equal(1);
});
it('return one hour difference between two dates', function() {
var d1 = new Date('2015', '9', '1', '10', '15', '30', '0');
var d2 = new Date('2015', '9', '1', '11', '15', '30', '0');
var result = intake.getDateDiff(d1, d2, 'hours');
expect(result).to.equal(1);
});
it('return one day difference between two dates', function() {
var d1 = '1/1/2015';
var d2 = '1/2/2015';
var result = intake.getDateDiff(d1, d2, 'days');
expect(result).to.equal(1);
});
it('return one week difference between two dates', function() {
var d1 = '1/1/2015';
var d2 = '1/8/2015';
var result = intake.getDateDiff(d1, d2, 'weeks');
expect(result).to.equal(1);
});
it('return one month difference between two dates', function() {
var d1 = '1/1/2015';
var d2 = '2/1/2015';
var result = intake.getDateDiff(d1, d2, 'months');
expect(result).to.equal(1);
});
it('return one year difference between two dates', function() {
var d1 = '1/1/2014';
var d2 = '1/1/2015';
var result = intake.getDateDiff(d1, d2, 'years');
expect(result).to.equal(1);
});
it('return undefined if interval is unknown', function() {
var d1 = '1/1/2014';
var d2 = '1/1/2015';
var result = intake.getDateDiff(d1, d2, 'test');
expect(result).to.equal(undefined);
});
it('return NaN if one or both of the dates are not a date', function() {
var d1 = '1/1/2014';
var d2 = 'test';
var result = intake.getDateDiff(d1, d2, 'days');
expect(isNaN(result)).to.equal(true);
});
});

}());

0 comments on commit dc16a99

Please sign in to comment.