UNPKG

date-extended

Version:

Additional date extensions with a chainable api

1,148 lines (886 loc) 89.3 kB
"use strict"; var it = require('it'), assert = require('assert'), dateExtended = require("../"); it.describe("date-extended",function (it) { var dt = new Date(); dt.getTimezoneOffset = function () { return this.timezoneOffset; }; dt.toString = function () { return this.str; }; dt.toLocaleString = function () { return this.strLocale; }; //Super of other classes it.describe("#format", function (it) { var date = dateExtended(new Date(2006, 7, 11, 0, 55, 12, 345)); it.should("format EEEE, MMMM dd, yyyy to Friday, August 11, 2006 ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy").value(), "Friday, August 11, 2006"); }); it.should("format EEEE, MMMM dd, yyyy G to Friday, August 11, 2006 AD ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy G").value(), "Friday, August 11, 2006 AD"); }); it.should("format EEEE, MMMM dd, yyyy GGGG to Friday, August 11, 2006 Anno Domini ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy GGGG").value(), "Friday, August 11, 2006 Anno Domini"); }); it.should("format M/dd/yy to 8/11/06 ", function () { assert.equal(date.format("M/dd/yy").value(), "8/11/06"); }); it.should("format E to 6 ", function () { assert.equal(date.format("E").value(), "6"); }); it.should("format h:m a to 12:55 AM ", function () { assert.equal(date.format("h:m a").value(), "12:55 AM"); }); it.should("format H:m:s to 12:55:12", function () { assert.equal(date.format('h:m:s').value(), "12:55:12"); }); it.should("format h:m:s.SS to 12:55:12.35 ", function () { assert.equal(date.format('h:m:s.SS').value(), ((date.value().getHours() % 12) || 12) + ":55:12.35"); }); it.should("format k:m:s.SS to 24:55:12.35 ", function () { assert.equal(date.format('k:m:s.SS').value(), (date.value().getHours() || 24) + ":55:12.35"); }); it.should("format K:m:s.SS to 0:55:12.35 ", function () { assert.equal(date.format('K:m:s.SS').value(), "0:55:12.35"); }); it.should("format H:m:s.SS to 0:55:12.35 ", function () { assert.equal(date.format('H:m:s.SS').value(), "0:55:12.35"); }); it.should("format ddMMyyyy to 11082006 ", function () { assert.equal(date.format("ddMMyyyy").value(), "11082006"); }); it.should("format q to 6 ", function () { assert.equal(date.format("q").value(), "3"); }); it.should("format w, q formatted to 32, 6 ", function () { assert.equal(date.format("w, q").value(), "32, 3"); }); it.should("format D w, q to 223 32, 6 ", function () { assert.equal(date.format("D w, q").value(), "223 32, 3"); }); it.should("format z to CDT ", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT'; assert.equal(dateExtended.format(dt, "z"), "CDT"); }); it.should("format z to GMT-05:00", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM'; dt.timezoneOffset = 300; assert.equal(dateExtended.format(dt, "z"), "GMT-05:00"); }); it.should("format zY to GMT-05:00", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM'; dt.timezoneOffset = 300; assert.equal(dateExtended.format(dt, "zY"), "GMT-05:00Y"); }); it.should("EEEE, MMMM dd, yyyy to Friday, August 11, 2006 ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy", true).value(), "Friday, August 11, 2006"); }); it.should("EEEE, MMMM dd, yyyy G to Friday, August 11, 2006 AD ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy G", true).value(), "Friday, August 11, 2006 AD"); }); it.should("EEEE, MMMM dd, yyyy GGGG to Friday, August 11, 2006 Anno Domini ", function () { assert.equal(date.format("EEEE, MMMM dd, yyyy GGGG", true).value(), "Friday, August 11, 2006 Anno Domini"); }); it.should("M/dd/yy to 8/11/06 ", function () { assert.equal(date.format("M/dd/yy", true).value(), "8/11/06"); }); it.should("E to 6 ", function () { assert.equal(date.format("E", true).value(), "6"); }); it.should("h:m a to 5:55 AM ", function () { assert.equal(date.format("h:m a", true).value(), ((date.value().getUTCHours() % 12) || 12) + ":55 AM"); }); it.should("H:m:s to 6:55:12", function () { assert.equal(date.format('h:m:s', true).value(), ((date.value().getUTCHours() % 12) || 12) + ":55:12"); }); it.should("h:m:s.SS to 6:55:12.35 ", function () { assert.equal(date.format('h:m:s.SS', true).value(), ((date.value().getUTCHours() % 12) || 12) + ":55:12.35"); }); it.should("k:m:s.SS to 6:55:12.35 ", function () { assert.equal(date.format('k:m:s.SS', true).value(), (date.value().getUTCHours() || 24) + ":55:12.35"); }); it.should("K:m:s.SS to 5:55:12.35 ", function () { assert.equal(date.format('K:m:s.SS', true).value(), date.value().getUTCHours() + ":55:12.35"); }); it.should("H:m:s.SS to 5:55:12.35 ", function () { assert.equal(date.format('H:m:s.SS', true).value(), date.value().getUTCHours() + ":55:12.35"); }); it.should("ddMMyyyy to 11082006 ", function () { assert.equal(date.format("ddMMyyyy", true).value(), "11082006"); }); it.should("q to 6 ", function () { assert.equal(date.format("q", true).value(), "3"); }); it.should("w, q formatted to 32, 6 ", function () { assert.equal(date.format("w, q", true).value(), "32, 3"); }); it.should("D w, q to 223 32, 6 ", function () { assert.equal(date.format("D w, q", true).value(), "223 32, 3"); }); it.should("z to CDT ", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT'; assert.equal(dateExtended.format(dt, "z", true), "CDT"); }); it.should("z to GMT-00:00", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0000'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM'; dt.timezoneOffset = 0; assert.equal(dateExtended.format(dt, "z", true), "GMT-00:00"); }); it.should("zY to GMT-00:00", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0000'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM'; dt.timezoneOffset = 0; assert.equal(dateExtended.format(dt, "zY", true), "GMT-00:00Y"); }); }); it.describe("#parse", function (it) { it.should("not parse ''", function () { assert.isNull(dateExtended.parseDate("", "MM/dd/yy")); }); it.should("throw an error if format is not specified", function () { assert.throws(function () { dateExtended.parseDate("", ""); }); assert.throws(function () { dateExtended.parseDate(""); }); }); it.describe("namespaced", function (it) { it.should("parse 08/11/06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("08/11/06", "MM/dd/yy"), aug112006); }); it.should("not parse 13/11/06", function () { assert.isNull(dateExtended.parseDate("13/11/06", "MM/dd/yy")); }); it.should("not parse 02/31/06", function () { assert.isNull(dateExtended.parseDate("02/31/06", "M/dd/yy")); }); it.should("parse 8/11/06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("8/11/06", "M/dd/yy"), aug112006); }); it.should("parse 8/11/2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("8/11/2006", "M/dd/yyyy"), aug112006); }); it.should("parse 11Aug2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("11Aug2006", 'ddMMMyyyy'), aug112006); }); it.should("not parse 11Ag2006", function () { assert.isNull(dateExtended.parseDate("11Ag2006", 'ddMMMyyyy')); }); it.should("parse Aug2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Aug2006", 'MMMyyyy'), new Date(2006, 7, 1)); }); it.should("parse Aug 11, 2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Aug 11, 2006", "MMM dd, yyyy"), aug112006); }); it.should("parse August 11, 06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("August 11, 2006", "MMMM dd, yyyy"), aug112006); }); it.should("parse Friday, August 11, 06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Friday, August 11, 2006", "EEEE, MMMM dd, yyyy"), aug112006); }); it.should("parse format date : 6, August 11, 2006 with format : E, MMMM dd, yyyy", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("6, August 11, 2006", "E, MMMM dd, yyyy"), aug112006); }); it.should("parse format date : Friday, August 11, 2006 AD with format : EEEE, MMMM dd, yyyy G", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Friday, August 11, 2006 AD", "EEEE, MMMM dd, yyyy G"), date); }); it.should("parse format date : Friday, August 11, 2006 Anno Domini with format : EEEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Friday, August 11, 2006 Anno Domini", "EEEE, MMMM dd, yyyy GGGG"), date); }); it.should("parse format date : Fri, August 11, 2006 Anno Domini with format : EEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended.parseDate("Fri, August 11, 2006 Anno Domini", "EEE, MMMM dd, yyyy GGGG"), date); }); it.should("not parse format date : Fr, August 11, 2006 Anno Domini with format : EEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.isNull(dateExtended.parseDate("Fr, August 11, 2006 Anno Domini", "EEE, MMMM dd, yyyy GGGG")); }); it.should("parse format date : 12:55 AM with format : h:m: a", function () { var date = new Date(1970, 0, 1, 0, 55); assert.deepEqual(dateExtended.parseDate("12:55 AM", "h:m a"), date); }); it.should("parse format date : 12:55 PM with format : h:m: a", function () { var date = new Date(1970, 0, 1, 13, 55); assert.deepEqual(dateExtended.parseDate("1:55 PM", "h:m a"), date); }); it.should("not parse format date : 13:55 AM with format : h:m: a", function () { assert.isNull(dateExtended.parseDate("13:55 AM", "h:m a")); }); it.should("parse format date : 12:55:12 with format : h:m:s", function () { var date = new Date(1970, 0, 1, 12, 55, 12); assert.deepEqual(dateExtended.parseDate("12:55:12", 'h:m:s'), date); }); it.should("parse format date : 12:55:12.35 with format : h:m:s.SS", function () { var date = new Date(1970, 0, 1, 12, 55, 12, 35); assert.deepEqual(dateExtended.parseDate("12:55:12.35", 'h:m:s.SS'), date); }); it.should("parse format date : 24:55:12.35 with format : k:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended.parseDate("24:55:12.35", 'k:m:s.SS'), date); }); it.should("parse format date : 0:55:12.35 with format : K:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended.parseDate("0:55:12.35", 'K:m:s.SS'), date); }); it.should("not parse format date : 24:55:12.35 with format : K:m:s.SS", function () { assert.isNull(dateExtended.parseDate("24:55:12.35", 'K:m:s.SS')); }); it.should("parse format date : 0:55:12.35 with format : H:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended.parseDate("0:55:12.35", 'H:m:s.SS'), date); }); it.should("parse format date : 223 32, 6 with format: D w, q", function () { var date = new Date(1970, 7, 11); assert.deepEqual(dateExtended.parseDate("223 32, 3", "D w, q"), date); }); it.should("parse format date : 223T32,T6 with format: DTw,Tq", function () { var date = new Date(1970, 7, 11); assert.deepEqual(dateExtended.parseDate("223T32,T3", "DTw,Tq"), date); }); }); it.describe("extension", function (it) { it.should("parse 08/11/06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("08/11/06").parseDate("MM/dd/yy").value(), aug112006); }); it.should("not parse 13/11/06", function () { assert.isNull(dateExtended("13/11/06").parseDate("MM/dd/yy").value()); }); it.should("not parse 02/31/06", function () { assert.isNull(dateExtended("02/31/06").parseDate("M/dd/yy").value()); }); it.should("parse 8/11/06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("8/11/06").parseDate("M/dd/yy").value(), aug112006); }); it.should("parse 8/11/2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("8/11/2006").parseDate("M/dd/yyyy").value(), aug112006); }); it.should("parse 11Aug2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("11Aug2006").parseDate('ddMMMyyyy').value(), aug112006); }); it.should("not parse 11Ag2006", function () { assert.isNull(dateExtended("11Ag2006").parseDate('ddMMMyyyy').value()); }); it.should("parse Aug2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Aug2006").parseDate('MMMyyyy').value(), new Date(2006, 7, 1)); }); it.should("parse Aug 11, 2006", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Aug 11, 2006").parseDate("MMM dd, yyyy").value(), aug112006); }); it.should("parse August 11, 06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("August 11, 2006").parseDate("MMMM dd, yyyy").value(), aug112006); }); it.should("parse Friday, August 11, 06", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Friday, August 11, 2006").parseDate("EEEE, MMMM dd, yyyy").value(), aug112006); }); it.should("parse format date : 6, August 11, 2006 with format : E, MMMM dd, yyyy", function () { var aug112006 = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("6, August 11, 2006").parseDate("E, MMMM dd, yyyy").value(), aug112006); }); it.should("parse format date : Friday, August 11, 2006 AD with format : EEEE, MMMM dd, yyyy G", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Friday, August 11, 2006 AD").parseDate("EEEE, MMMM dd, yyyy G").value(), date); }); it.should("parse format date : Friday, August 11, 2006 Anno Domini with format : EEEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Friday, August 11, 2006 Anno Domini").parseDate("EEEE, MMMM dd, yyyy GGGG").value(), date); }); it.should("parse format date : Fri, August 11, 2006 Anno Domini with format : EEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.deepEqual(dateExtended("Fri, August 11, 2006 Anno Domini").parseDate("EEE, MMMM dd, yyyy GGGG").value(), date); }); it.should("not parse format date : Fr, August 11, 2006 Anno Domini with format : EEE, MMMM dd, yyyy GGGG", function () { var date = new Date(2006, 7, 11, 0); assert.isNull(dateExtended("Fr, August 11, 2006 Anno Domini").parseDate("EEE, MMMM dd, yyyy GGGG").value()); }); it.should("parse format date : 12:55 AM with format : h:m: a", function () { var date = new Date(1970, 0, 1, 0, 55); assert.deepEqual(dateExtended("12:55 AM").parseDate("h:m a").value(), date); }); it.should("parse format date : 12:55 PM with format : h:m: a", function () { var date = new Date(1970, 0, 1, 13, 55); assert.deepEqual(dateExtended("1:55 PM").parseDate("h:m a").value(), date); }); it.should("not parse format date : 13:55 AM with format : h:m: a", function () { assert.isNull(dateExtended("13:55 AM").parseDate("h:m a").value()); }); it.should("parse format date : 12:55:12 with format : h:m:s", function () { var date = new Date(1970, 0, 1, 12, 55, 12); assert.deepEqual(dateExtended("12:55:12").parseDate('h:m:s').value(), date); }); it.should("parse format date : 12:55:12.35 with format : h:m:s.SS", function () { var date = new Date(1970, 0, 1, 12, 55, 12, 35); assert.deepEqual(dateExtended("12:55:12.35").parseDate('h:m:s.SS').value(), date); }); it.should("parse format date : 24:55:12.35 with format : k:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended("24:55:12.35").parseDate('k:m:s.SS').value(), date); }); it.should("parse format date : 0:55:12.35 with format : K:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended("0:55:12.35").parseDate('K:m:s.SS').value(), date); }); it.should("not parse format date : 24:55:12.35 with format : K:m:s.SS", function () { assert.isNull(dateExtended("24:55:12.35").parseDate('K:m:s.SS').value()); }); it.should("parse format date : 0:55:12.35 with format : H:m:s.SS", function () { var date = new Date(1970, 0, 1, 0, 55, 12, 35); assert.deepEqual(dateExtended("0:55:12.35").parseDate('H:m:s.SS').value(), date); }); it.should("parse format date : 223 32, 6 with format: D w, q", function () { var date = new Date(1970, 7, 11); assert.deepEqual(dateExtended("223 32, 3").parseDate("D w, q").value(), date); }); it.should("parse format date : 223T32,T6 with format: DTw,Tq", function () { var date = new Date(1970, 7, 11); assert.deepEqual(dateExtended("223T32,T3").parseDate("DTw,Tq").value(), date); }); }); }); it.describe("#getDaysInMonth", function (it) { it.describe("namespaced", function (it) { it.should("detrmine the number of days in january", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 0, 1)), 31); }); it.should("detrmine the number of days in february", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 1, 1)), 28); assert.equal(dateExtended.getDaysInMonth(new Date(2004, 1, 1)), 29); assert.equal(dateExtended.getDaysInMonth(new Date(2000, 1, 1)), 29); assert.equal(dateExtended.getDaysInMonth(new Date(1900, 1, 1)), 28); assert.equal(dateExtended.getDaysInMonth(new Date(1800, 1, 1)), 28); assert.equal(dateExtended.getDaysInMonth(new Date(1700, 1, 1)), 28); assert.equal(dateExtended.getDaysInMonth(new Date(1600, 1, 1)), 29); }); it.should("detrmine the number of days in march", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 2, 1)), 31); }); it.should("detrmine the number of days in april", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 3, 1)), 30); }); it.should("detrmine the number of days in may", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 4, 1)), 31); }); it.should("detrmine the number of days in june", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 5, 1)), 30); }); it.should("detrmine the number of days in july", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 6, 1)), 31); }); it.should("detrmine the number of days in august", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 7, 1)), 31); }); it.should("detrmine the number of days in september", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 8, 1)), 30); }); it.should("detrmine the number of days in october", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 9, 1)), 31); }); it.should("detrmine the number of days in november", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 10, 1)), 30); }); it.should("detrmine the number of days in december", function () { assert.equal(dateExtended.getDaysInMonth(new Date(2006, 11, 1)), 31); }); }); it.describe("extension", function (it) { it.should("detrmine the number of days in january", function () { assert.equal(dateExtended(new Date(2006, 0, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in february", function () { assert.equal(dateExtended(new Date(2006, 1, 1)).getDaysInMonth().value(), 28); assert.equal(dateExtended(new Date(2004, 1, 1)).getDaysInMonth().value(), 29); assert.equal(dateExtended(new Date(2000, 1, 1)).getDaysInMonth().value(), 29); assert.equal(dateExtended(new Date(1900, 1, 1)).getDaysInMonth().value(), 28); assert.equal(dateExtended(new Date(1800, 1, 1)).getDaysInMonth().value(), 28); assert.equal(dateExtended(new Date(1700, 1, 1)).getDaysInMonth().value(), 28); assert.equal(dateExtended(new Date(1600, 1, 1)).getDaysInMonth().value(), 29); }); it.should("detrmine the number of days in march", function () { assert.equal(dateExtended(new Date(2006, 2, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in april", function () { assert.equal(dateExtended(new Date(2006, 3, 1)).getDaysInMonth().value(), 30); }); it.should("detrmine the number of days in may", function () { assert.equal(dateExtended(new Date(2006, 4, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in june", function () { assert.equal(dateExtended(new Date(2006, 5, 1)).getDaysInMonth().value(), 30); }); it.should("detrmine the number of days in july", function () { assert.equal(dateExtended(new Date(2006, 6, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in august", function () { assert.equal(dateExtended(new Date(2006, 7, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in september", function () { assert.equal(dateExtended(new Date(2006, 8, 1)).getDaysInMonth().value(), 30); }); it.should("detrmine the number of days in october", function () { assert.equal(dateExtended(new Date(2006, 9, 1)).getDaysInMonth().value(), 31); }); it.should("detrmine the number of days in november", function () { assert.equal(dateExtended(new Date(2006, 10, 1)).getDaysInMonth().value(), 30); }); it.should("detrmine the number of days in december", function () { assert.equal(dateExtended(new Date(2006, 11, 1)).getDaysInMonth().value(), 31); }); }); }); it.describe("#isLeapYear", function (it) { it.describe("namespaced", function (it) { it.should("be true", function () { assert.isTrue(dateExtended.isLeapYear(new Date(1600, 0, 1))); assert.isTrue(dateExtended.isLeapYear(new Date(2004, 0, 1))); assert.isTrue(dateExtended.isLeapYear(new Date(2000, 0, 1))); }); it.should("be false", function () { assert.isFalse(dateExtended.isLeapYear(new Date(2006, 0, 1))); assert.isFalse(dateExtended.isLeapYear(new Date(1900, 0, 1))); assert.isFalse(dateExtended.isLeapYear(new Date(1800, 0, 1))); assert.isFalse(dateExtended.isLeapYear(new Date(1700, 0, 1))); }); }); it.describe("extension", function (it) { it.should("be true", function () { assert.isTrue(dateExtended(new Date(1600, 0, 1)).isLeapYear().value()); assert.isTrue(dateExtended(new Date(2004, 0, 1)).isLeapYear().value()); assert.isTrue(dateExtended(new Date(2000, 0, 1)).isLeapYear().value()); }); it.should("be false", function () { assert.isFalse(dateExtended(new Date(2006, 0, 1)).isLeapYear().value()); assert.isFalse(dateExtended(new Date(1900, 0, 1)).isLeapYear().value()); assert.isFalse(dateExtended(new Date(1800, 0, 1)).isLeapYear().value()); assert.isFalse(dateExtended(new Date(1700, 0, 1)).isLeapYear().value()); }); }); }); it.describe("#getTimezoneName", function (it) { it.describe("namespace", function () { it.should("return CDT", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT'; assert.equal(dateExtended.getTimezoneName(dt), 'CDT'); dt.str = 'Sun Sep 17 2006 22:57:18 GMT-0500 (CDT)'; dt.strLocale = 'Sun Sep 17 22:57:18 2006'; assert.equal(dateExtended.getTimezoneName(dt), 'CDT'); }); }); it.describe("extension", function () { it.should("return CDT", function () { dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)'; dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT'; assert.equal(dateExtended(dt).getTimezoneName().value(), 'CDT'); dt.str = 'Sun Sep 17 2006 22:57:18 GMT-0500 (CDT)'; dt.strLocale = 'Sun Sep 17 22:57:18 2006'; assert.equal(dateExtended(dt).getTimezoneName().value(), 'CDT'); }); }); }); it.describe("#compare", function (it) { it.describe("namespaced", function (it) { it.should("be 0 ", function () { var d1 = new Date(); d1.setHours(0); assert.equal(dateExtended.compare(d1, d1), 0); }); it.should("be 1", function () { var d1 = new Date(); d1.setHours(0); var d2 = new Date(); d2.setFullYear(2005); d2.setHours(12); assert.equal(dateExtended.compare(d1, d2, "date"), 1); assert.equal(dateExtended.compare(d1, d2, "datetime"), 1); }); it.should("be -1 ", function () { var d1 = new Date(); d1.setHours(0); var d2 = new Date(); d2.setFullYear(2005); d2.setHours(12); assert.equal(dateExtended.compare(d2, d1, "date"), -1); assert.equal(dateExtended.compare(d1, d2, "time"), -1); }); }); it.describe("extension", function (it) { it.should("be 0 ", function () { var d1 = new Date(); d1.setHours(0); assert.equal(dateExtended(d1).compare(d1).value(), 0); }); it.should("be 1", function () { var d1 = new Date(); d1.setHours(0); var d2 = new Date(); d2.setFullYear(2005); d2.setHours(12); assert.equal(dateExtended(d1).compare(d2, "date").value(), 1); assert.equal(dateExtended(d1).compare(d2, "datetime").value(), 1); }); it.should("be -1 ", function () { var d1 = new Date(); d1.setHours(0); var d2 = new Date(); d2.setFullYear(2005); d2.setHours(12); assert.equal(dateExtended(d2).compare(d1, "date").value(), -1); assert.equal(dateExtended(d1).compare(d2, "time").value(), -1); }); }); }); it.describe("#add", function (it) { it.describe("namespaced", function (it) { it.describe("when adding years", function () { it.should("add 1 year", function () { var dtA = new Date(2005, 11, 27); var dtB = new Date(2006, 11, 27); assert.deepEqual(dateExtended.add(dtA, "year", 1), dtB); assert.deepEqual(dateExtended.add(dtA, "years", 1), dtB); }); it.should("add -1 years", function () { var dtA = new Date(2005, 11, 27); var dtB = new Date(2004, 11, 27); assert.deepEqual(dateExtended.add(dtA, "year", -1), dtB); assert.deepEqual(dateExtended.add(dtA, "years", -1), dtB); }); it.should("add 5 years", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2005, 1, 28); assert.deepEqual(dateExtended.add(dtA, "year", 5), dtB); assert.deepEqual(dateExtended.add(dtA, "years", 5), dtB); }); it.should("add 30 years", function () { var dtA = new Date(1900, 11, 31); var dtB = new Date(1930, 11, 31); assert.deepEqual(dateExtended.add(dtA, "year", 30), dtB); assert.deepEqual(dateExtended.add(dtA, "years", 30), dtB); }); it.should("add 35 years", function () { var dtA = new Date(1995, 11, 31); var dtB = new Date(2030, 11, 31); assert.deepEqual(dateExtended.add(dtA, "year", 35), dtB); assert.deepEqual(dateExtended.add(dtA, "years", 35), dtB); }); }); it.describe("when adding quarters to a date", function (it) { it.should("add 1 quarter", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 3, 1); assert.deepEqual(dateExtended.add(dtA, "quarter", 1), dtB); assert.deepEqual(dateExtended.add(dtA, "quarters", 1), dtB); }); it.should("add 3 quarters", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2000, 7, 29); assert.deepEqual(dateExtended.add(dtA, "quarter", 2), dtB); assert.deepEqual(dateExtended.add(dtA, "quarters", 2), dtB); }); it.should("add 4 quarters", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2001, 1, 28); assert.deepEqual(dateExtended.add(dtA, "quarter", 4), dtB); assert.deepEqual(dateExtended.add(dtA, "quarters", 4), dtB); }); }); it.describe("when adding months to a date", function (it) { it.should("add 1 month", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 1, 1); assert.deepEqual(dateExtended.add(dtA, "month", 1), dtB); assert.deepEqual(dateExtended.add(dtA, "months", 1), dtB); dtA = new Date(2000, 0, 31); dtB = new Date(2000, 1, 29); assert.deepEqual(dateExtended.add(dtA, "month", 1), dtB); assert.deepEqual(dateExtended.add(dtA, "months", 1), dtB); }); it.should("add 4 months", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2001, 1, 28); assert.deepEqual(dateExtended.add(dtA, "month", 12), dtB); assert.deepEqual(dateExtended.add(dtA, "months", 12), dtB); }); }); it.describe("when adding weeks to a date", function (it) { it.should("add 1 week", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 0, 8); assert.deepEqual(dateExtended.add(dtA, "week", 1), dtB); assert.deepEqual(dateExtended.add(dtA, "weeks", 1), dtB); }); }); it.describe("when adding days to a date", function (it) { it.should("add days", function () { var interv = "day"; var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 0, 2); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2001, 0, 1); dtB = new Date(2002, 0, 1); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 365)); dtA = new Date(2000, 0, 1); dtB = new Date(2001, 0, 1); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 366)); dtA = new Date(2000, 1, 28); dtB = new Date(2000, 1, 29); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2001, 1, 28); dtB = new Date(2001, 2, 1); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2000, 2, 1); dtB = new Date(2000, 1, 29); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -1)); dtA = new Date(2001, 2, 1); dtB = new Date(2001, 1, 28); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -1)); dtA = new Date(2000, 0, 1); dtB = new Date(1999, 11, 31); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -1)); }); }); it.describe("when adding weekdays to a date", function (it) { it.should("add weekdays", function () { var interv = "weekday"; // Sat, Jan 1 var dtA = new Date(2000, 0, 1); // Should be Mon, Jan 3 var dtB = new Date(2000, 0, 3); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); // Sun, Jan 2 dtA = new Date(2000, 0, 2); // Should be Mon, Jan 3 dtB = new Date(2000, 0, 3); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); // Sun, Jan 2 dtA = new Date(2000, 0, 2); // Should be Fri, Jan 7 dtB = new Date(2000, 0, 7); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 5)); // Sun, Jan 2 dtA = new Date(2000, 0, 2); // Should be Mon, Jan 10 dtB = new Date(2000, 0, 10); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 6)); // Mon, Jan 3 dtA = new Date(2000, 0, 3); // Should be Mon, Jan 17 dtB = new Date(2000, 0, 17); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 10)); // Sat, Jan 8 dtA = new Date(2000, 0, 8); // Should be Mon, Jan 3 dtB = new Date(2000, 0, 3); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -5)); // Sun, Jan 9 dtA = new Date(2000, 0, 9); // Should be Wed, Jan 5 dtB = new Date(2000, 0, 5); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -3)); // Sun, Jan 23 dtA = new Date(2000, 0, 23); // Should be Fri, Jan 7 dtB = new Date(2000, 0, 7); assert.deepEqual(dtB, dateExtended.add(dtA, interv, -11)); }); }); it.describe("when adding hours to a date", function (it) { it.should("add hours", function () { var interv = "hour"; var dtA = new Date(2000, 0, 1, 11); var dtB = new Date(2000, 0, 1, 12); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2001, 9, 28, 0); dtB = new Date(dtA.getTime() + (60 * 60 * 1000)); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2001, 9, 28, 23); dtB = new Date(2001, 9, 29, 0); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2001, 11, 31, 23); dtB = new Date(2002, 0, 1, 0); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); }); }); it.describe("when adding minutes to a date", function (it) { it.should("add minutes", function () { var interv = "minute"; var dtA = new Date(2000, 11, 31, 23, 59); var dtB = new Date(2001, 0, 1, 0, 0); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2000, 11, 27, 12, 2); dtB = new Date(2000, 11, 27, 13, 2); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 60)); }); }); it.describe("when adding seconds to a date", function (it) { it.should("add seconds", function () { var interv = "second"; var dtA = new Date(2000, 11, 31, 23, 59, 59); var dtB = new Date(2001, 0, 1, 0, 0, 0); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1)); dtA = new Date(2000, 11, 27, 8, 10, 59); dtB = new Date(2000, 11, 27, 8, 11, 59); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 60)); }); }); it.describe("when adding milliseconds to a date", function (it) { it.should("add milliseconds", function () { var interv = "millisecond"; var dtA = new Date(2000, 11, 31, 23, 59, 59, 900); var dtB = new Date(2001, 0, 1, 0, 0, 0, 0); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 100)); dtA = new Date(2000, 11, 27, 8, 10, 53, 2); dtB = new Date(2000, 11, 27, 8, 10, 54, 2); assert.deepEqual(dtB, dateExtended.add(dtA, interv, 1000)); }); }); }); it.describe("extension", function (it) { it.describe("when adding years", function () { it.should("add 1 year", function () { var dtA = new Date(2005, 11, 27); var dtB = new Date(2006, 11, 27); assert.deepEqual(dateExtended(dtA).add("year", 1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("years", 1).value(), dtB); }); it.should("add -1 years", function () { var dtA = new Date(2005, 11, 27); var dtB = new Date(2004, 11, 27); assert.deepEqual(dateExtended(dtA).add("year", -1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("years", -1).value(), dtB); }); it.should("add 5 years", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2005, 1, 28); assert.deepEqual(dateExtended(dtA).add("year", 5).value(), dtB); assert.deepEqual(dateExtended(dtA).add("years", 5).value(), dtB); }); it.should("add 30 years", function () { var dtA = new Date(1900, 11, 31); var dtB = new Date(1930, 11, 31); assert.deepEqual(dateExtended(dtA).add("year", 30).value(), dtB); assert.deepEqual(dateExtended(dtA).add("years", 30).value(), dtB); }); it.should("add 35 years", function () { var dtA = new Date(1995, 11, 31); var dtB = new Date(2030, 11, 31); assert.deepEqual(dateExtended(dtA).add("year", 35).value(), dtB); assert.deepEqual(dateExtended(dtA).add("years", 35).value(), dtB); }); }); it.describe("when adding quarters to a date", function (it) { it.should("add 1 quarter", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 3, 1); assert.deepEqual(dateExtended(dtA).add("quarter", 1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("quarters", 1).value(), dtB); }); it.should("add 3 quarters", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2000, 7, 29); assert.deepEqual(dateExtended(dtA).add("quarter", 2).value(), dtB); assert.deepEqual(dateExtended(dtA).add("quarters", 2).value(), dtB); }); it.should("add 4 quarters", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2001, 1, 28); assert.deepEqual(dateExtended(dtA).add("quarter", 4).value(), dtB); assert.deepEqual(dateExtended(dtA).add("quarters", 4).value(), dtB); }); }); it.describe("when adding months to a date", function (it) { it.should("add 1 month", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 1, 1); assert.deepEqual(dateExtended(dtA).add("month", 1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("months", 1).value(), dtB); dtA = new Date(2000, 0, 31); dtB = new Date(2000, 1, 29); assert.deepEqual(dateExtended(dtA).add("month", 1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("months", 1).value(), dtB); }); it.should("add 4 months", function () { var dtA = new Date(2000, 1, 29); var dtB = new Date(2001, 1, 28); assert.deepEqual(dateExtended(dtA).add("month", 12).value(), dtB); assert.deepEqual(dateExtended(dtA).add("months", 12).value(), dtB); }); }); it.describe("when adding weeks to a date", function (it) { it.should("add 1 week", function () { var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 0, 8); assert.deepEqual(dateExtended(dtA).add("week", 1).value(), dtB); assert.deepEqual(dateExtended(dtA).add("weeks", 1).value(), dtB); }); }); it.describe("when adding days to a date", function (it) { it.should("add days", function () { var interv = "day"; var dtA = new Date(2000, 0, 1); var dtB = new Date(2000, 0, 2); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 1).value()); dtA = new Date(2001, 0, 1); dtB = new Date(2002, 0, 1); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 365).value()); dtA = new Date(2000, 0, 1); dtB = new Date(2001, 0, 1); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 366).value()); dtA = new Date(2000, 1, 28); dtB = new Date(2000, 1, 29); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 1).value()); dtA = new Date(2001, 1, 28); dtB = new Date(2001, 2, 1); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 1).value()); dtA = new Date(2000, 2, 1); dtB = new Date(2000, 1, 29); assert.deepEqual(dtB, dateExtended(dtA).add(interv, -1).value()); dtA = new Date(2001, 2, 1); dtB = new Date(2001, 1, 28); assert.deepEqual(dtB, dateExtended(dtA).add(interv, -1).value()); dtA = new Date(2000, 0, 1); dtB = new Date(1999, 11, 31); assert.deepEqual(dtB, dateExtended(dtA).add(interv, -1).value()); }); }); it.describe("when adding weekdays to a date", function (it) { it.should("add weekdays", function () { var interv = "weekday"; // Sat, Jan 1 var dtA = new Date(2000, 0, 1); // Should be Mon, Jan 3 var dtB = new Date(2000, 0, 3); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 1).value()); // Sun, Jan 2 dtA = new Date(2000, 0, 2); // Should be Mon, Jan 3 dtB = new Date(2000, 0, 3); assert.deepEqual(dtB, dateExtended(dtA).add(interv, 1).value()); // Sun, Jan 2 dtA = new Date(2000, 0, 2);