if(typeof require !== 'undefined') { var Specification = require('../scripts/specification-converter.js'); } Date.Specification = new Specification({ 'Overview': { setup: function() { this.d = []; this.d[0] = new Date(2004,6,8,22,30,0,0); this.d[1] = this.d[0].clone().setTimezoneOffset('-0400'); }, 'July 8th, 2004, 10:30 PM': { run: function() { this.date = Date.parse('July 8th, 2004, 10:30 PM') }, assert: function() { return this.d[0].compareTo( this.date ) == 0 } }, '2004.07.08 22:30': { run: function() { this.date = Date.parse('2004.07.08 22:30') }, assert: function() { return this.d[0].compareTo( this.date ) == 0 } }, '10:30pm 08-July-2004': { run: function() { this.date = Date.parse('10:30pm 08-July-2004') }, assert: function() { return this.d[0].compareTo( this.date ) == 0 } }, 'Thu Jul 8 2004 22:30:00 GMT-0400': { run: function() { this.date = Date.parse('Thu Jul 8 2004 22:30:00 GMT-0400') }, assert: function() { return this.d[1].equals( this.date ) } } }, 'Standard Patterns': { setup: function() { this.today = new Date().clearTime(); this.baseline = new Date(2004,6,1,22,30,0); this.baseline2 = new Date(2004,6,15,6,45,0); }, '2004, July 01, 10:30:00 PM : FullDateTimePattern [dddd, MMMM dd, yyyy h:mm:ss tt]': { run: function() { this.date = Date.parse('2004, July 01, 10:30:00 PM') }, assert: function() { return this.baseline.equals( this.date ) } }, '2004, July 15, 6:45:00 AM : FullDateTimePattern [dddd, MMMM dd, yyyy h:mm:ss tt]': { run: function() { this.date = Date.parse('2004, July 15, 6:45:00 AM') }, assert: function() { return this.baseline2.equals( this.date ) } }, 'Thursday, July 01, 2004 : LongDatePattern [dddd, MMMM dd, yyyy]': { run: function() { this.date = Date.parse('Thursday, July 01, 2004') }, assert: function() { return this.baseline.clearTime().equals( this.date ) } }, 'Thursday, July 15, 2004 : LongDatePattern [dddd, MMMM dd, yyyy]': { run: function() { this.date = Date.parse('Thursday, July 15, 2004') }, assert: function() { return this.baseline2.clearTime().equals( this.date ) } }, '10:30:00 PM : LongTimePattern [h:mm:ss tt]': { run: function() { this.date = Date.parse('10:30:00 PM') }, assert: function() { return this.today.clone().set( { hour: 22, minute: 30 } ).equals( this.date ) } }, '6:45:00 AM : LongTimePattern [h:mm:ss tt]': { run: function() { this.date = Date.parse('6:45:00 AM') }, assert: function() { return this.today.clone().set( { hour: 6, minute: 45 } ).equals( this.date ) } }, 'July 01 : MonthDayPattern [MMMM dd]': { run: function() { this.date = Date.parse('July 01') }, assert: function() { return this.today.clone().set( { month: 6, day: 1 } ).equals( this.date ) } }, 'July 15 : MonthDayPattern [MMMM dd]': { run: function() { this.date = Date.parse('July 15') }, assert: function() { return Date.today().set( { month: 6, day: 15 } ).equals( this.date ) } }, 'July 2004 : YearMonthPattern [MMMM, yyyy]': { run: function() { this.date = Date.parse('July 2004') }, assert: function() { return new Date(2004,6,1).equals( this.date ) } }, '7/1/2004 : ShortDatePattern [M/d/yyyy]': { run: function() { this.date = Date.parse('7/1/2004') }, assert: function() { return this.baseline.clearTime().equals( this.date ) } }, '7/15/2004 : ShortDatePattern [M/d/yyyy]': { run: function() { this.date = Date.parse('7/15/2004') }, assert: function() { return this.baseline2.clearTime().equals( this.date ) } }, '10:30 PM : ShortTimePattern [h:mm tt]': { run: function() { this.date = Date.parse('10:30 PM') }, assert: function() { return this.today.clone().set( { hour: 22, minute: 30 } ).equals( this.date ) } }, '6:45 AM : ShortTimePattern [h:mm tt]': { run: function() { this.date = Date.parse('6:45 AM') }, assert: function() { return this.today.clone().set( { hour: 6, minute: 45 } ).equals( this.date ) } }, '2004-07-01T22:30:00 : SortableDateTimePattern [yyyy-MM-ddTHH:mm:ss]': { run: function() { this.date = Date.parse('2004-07-01T22:30:00') }, assert: function() { return this.baseline.equals( this.date ) } }, '2004-07-15T06:45:00 : SortableDateTimePattern [yyyy-MM-ddTHH:mm:ss]': { run: function() { this.date = Date.parse('2004-07-15T06:45:00') }, assert: function() { return this.baseline2.equals( this.date ) } }, '11 Aug 2007 7:15:00 am EDT': { run: function() { this.date = Date.parse('11 Aug 2007 7:15:00 am EDT') }, assert: function() { return new Date(2007,7,11,7,15,0).setTimezone('EDT').equals( this.date ) } }, 'Tue Nov 20 2007 08:00:00 UTC': { run: function() { this.date = Date.parse("Tue Nov 20 2007 08:00:00 UTC") }, assert: function() { return new Date(2007,10,20,8,0,0).setTimezone("UTC").equals( this.date ) } }, '24 Apr 2008 17:00': { run: function() { this.date = Date.parse("24 Apr 2008 17:00") }, assert: function() { return new Date(2008,3,24,17,0,0).equals( this.date ) } }, '24 April 2008 17:00': { run: function() { this.date = Date.parse("24 April 2008 17:00") }, assert: function() { return new Date(2008,3,24,17,0,0).equals( this.date ) } } }, 'Numeric Variations': { setup: function() { this.baseline = new Date(2004,6,1,22,30,0); this.baseline2 = new Date(2004,6,15,6,45,0); }, '7/1/2004 10 PM': { run: function() { this.date = Date.parse('7/1/2004 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '07/01/2004 10 PM': { run: function() { this.date = Date.parse('07/01/2004 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '07/01/04 10 PM': { run: function() { this.date = Date.parse('07/01/04 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '7/1/04 10 PM': { run: function() { this.date = Date.parse('7/1/04 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '7/15/2004 6 AM': { run: function() { this.date = Date.parse('7/15/2004 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '07/15/2004 6 AM': { run: function() { this.date = Date.parse('07/15/2004 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '07/15/04 6 AM': { run: function() { this.date = Date.parse('07/15/04 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '7/15/04 6 AM': { run: function() { this.date = Date.parse('7/15/04 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '7/1/2004 10pm': { run: function() { this.date = Date.parse('7/1/2004 10pm') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '07/01/2004 10pm': { run: function() { this.date = Date.parse('07/01/2004 10pm') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '07/01/04 10pm': { run: function() { this.date = Date.parse('07/01/04 10pm') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '7/1/04 10pm': { run: function() { this.date = Date.parse('7/1/04 10pm') }, assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) } }, '7/15/2004 6am': { run: function() { this.date = Date.parse('7/15/2004 6am') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '07/15/2004 6am': { run: function() { this.date = Date.parse('07/15/2004 6am') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '07/15/04 6am': { run: function() { this.date = Date.parse('07/15/04 6am') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '7/15/04 6am': { run: function() { this.date = Date.parse('7/15/04 6am') }, assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) } }, '7/1/2004 10:30 PM': { run: function() { this.date = Date.parse('7/1/2004 10:30 PM') }, assert: function() { return this.baseline.equals( this.date ) } }, '07/01/2004 10:30 PM': { run: function() { this.date = Date.parse('07/01/2004 10:30 PM') }, assert: function() { return this.baseline.equals( this.date ) } }, '07/01/04 10:30 PM': { run: function() { this.date = Date.parse('07/01/04 10:30 PM') }, assert: function() { return this.baseline.equals( this.date ) } }, '7/1/04 10:30 PM': { run: function() { this.date = Date.parse('7/1/04 10:30 PM') }, assert: function() { return this.baseline.equals( this.date ) } }, '7/15/2004 6:45 AM': { run: function() { this.date = Date.parse('7/15/2004 6:45 AM') }, assert: function() { return this.baseline2.equals( this.date ) } }, '07/15/2004 6:45 AM': { run: function() { this.date = Date.parse('07/15/2004 6:45 AM') }, assert: function() { return this.baseline2.equals( this.date ) } }, '07/15/04 6:45 AM': { run: function() { this.date = Date.parse('07/15/04 6:45 AM') }, assert: function() { return this.baseline2.equals( this.date ) } }, '7/15/04 6:45 AM': { run: function() { this.date = Date.parse('7/15/04 6:45 AM') }, assert: function() { return this.baseline2.equals( this.date ) } }, '7/1/2004 10:30p': { run: function() { this.date = Date.parse('7/1/2004 10:30p') }, assert: function() { return this.baseline.equals( this.date ) } }, '07/01/2004 10:30p': { run: function() { this.date = Date.parse('07/01/2004 10:30p') }, assert: function() { return this.baseline.equals( this.date ) } }, '07/01/04 10:30p': { run: function() { this.date = Date.parse('07/01/04 10:30p') }, assert: function() { return this.baseline.equals( this.date ) } }, '7/1/04 10:30p': { run: function() { this.date = Date.parse('7/1/04 10:30p') }, assert: function() { return this.baseline.equals( this.date ) } }, '7/15/2004 6:45a': { run: function() { this.date = Date.parse('7/15/2004 6:45a') }, assert: function() { return this.baseline2.equals( this.date ) } }, '07/15/2004 6:45a': { run: function() { this.date = Date.parse('07/15/2004 6:45a') }, assert: function() { return this.baseline2.equals( this.date ) } }, '7/15/04 6:45a': { run: function() { this.date = Date.parse('7/15/04 6:45a') }, assert: function() { return this.baseline2.equals( this.date ) } }, '07/01 10 PM': { run: function() { this.date = Date.parse('07/01 10 PM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) } }, '7/1 10 PM': { run: function() { this.date = Date.parse('7/1 10 PM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) } }, '07/15 6 AM': { run: function() { this.date = Date.parse('07/15 6 AM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) } }, '7/15 6 AM': { run: function() { this.date = Date.parse('7/15 6 AM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) } }, '07/01 10pm': { run: function() { this.date = Date.parse('07/01 10pm') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) } }, '7/1 10pm': { run: function() { this.date = Date.parse('7/1 10pm') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) } }, '7/15 6am': { run: function() { this.date = Date.parse('7/15 6am') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) } }, '07/15 6am': { run: function() { this.date = Date.parse('07/15 6am') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) } }, '07/01 10:30 PM': { run: function() { this.date = Date.parse('07/01 10:30 PM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) } }, '7/1 10:30 PM': { run: function() { this.date = Date.parse('7/1 10:30 PM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) } }, '7/15 6:45 AM': { run: function() { this.date = Date.parse('7/15 6:45 AM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) } }, '07/15 6:45 AM': { run: function() { this.date = Date.parse('07/15 6:45 AM') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) } }, '7/1 10:30p': { run: function() { this.date = Date.parse('7/1 10:30p') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) } }, '07/01 10:30p': { run: function() { this.date = Date.parse('07/01 10:30p') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) } }, '07/15 6:45a': { run: function() { this.date = Date.parse('07/15 6:45a') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) } }, '7/15 6:45a': { run: function() { this.date = Date.parse('7/15 6:45a') }, assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) } } }, 'Phrase Variations': { setup: function() { var today = new Date().clearTime(); this.baseline = new Date(2004,06,01,22,30,0,0); this.baseline2 = new Date(2004,06,15,6,45,0,0); this.baseline3 = new Date( today.getFullYear(),06,1,22,30,0,0); this.baseline4 = new Date( today.getFullYear(),06,15,6,45,0,0) }, 'Thu Jul 1 2004 22:30:00': { run: function() { this.date = Date.parse('Thu Jul 1 2004 22:30:00') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'Thu July 01 2004 22:30:00': { run: function() { this.date = Date.parse('Thu July 01 2004 22:30:00') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'Thu Jul 15 2004 06:45:00': { run: function() { this.date = Date.parse('Thu Jul 15 2004 06:45:00') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'Thu July 15 2004 06:45:00': { run: function() { this.date = Date.parse('Thu July 15 2004 06:45:00') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 1 2004 22:30:00': { run: function() { this.date = Date.parse('July 1 2004 22:30:00') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'July 01 2004 22:30:00': { run: function() { this.date = Date.parse('July 01 2004 22:30:00') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'Jul 15 2004 06:45:00': { run: function() { this.date = Date.parse('Jul 15 2004 06:45:00') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 15 2004 06:45:00': { run: function() { this.date = Date.parse('July 15 2004 06:45:00') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 1 2004 10 PM': { run: function() { this.date = Date.parse('July 1 2004 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1 2004 10:30 PM': { run: function() { this.date = Date.parse('July 1 2004 10:30 PM') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'Jul 1 2004 10PM': { run: function() { this.date = Date.parse('Jul 1 2004 10PM') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'Jul 1 2004 10:30PM': { run: function() { this.date = Date.parse('Jul 1 2004 10:30PM') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'July 1 2004 10p': { run: function() { this.date = Date.parse('July 1 2004 10p') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1 2004 10:30p': { run: function() { this.date = Date.parse('July 1 2004 10:30p') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'July 15 2004 6 AM': { run: function() { this.date = Date.parse('July 15 2004 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15 2004 6:45 AM': { run: function() { this.date = Date.parse('July 15 2004 6:45 AM') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'Jul 15 2004 6AM': { run: function() { this.date = Date.parse('Jul 15 2004 6AM') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'Jul 15 2004 6:45AM': { run: function() { this.date = Date.parse('Jul 15 2004 6:45AM') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 15 2004 6a': { run: function() { this.date = Date.parse('July 15 2004 6a') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15 2004 6:45a': { run: function() { this.date = Date.parse('July 15 2004 6:45a') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 1st 2004 10 PM': { run: function() { this.date = Date.parse('July 1st 2004 10 PM') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1st 2004 10:30 PM': { run: function() { this.date = Date.parse('July 1st 2004 10:30 PM') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'Jul 1 2004 10PM': { run: function() { this.date = Date.parse('Jul 1 2004 10PM') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'Jul 1 2004 10:30PM': { run: function() { this.date = Date.parse('Jul 1 2004 10:30PM') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'July 1st 2004 10p': { run: function() { this.date = Date.parse('July 1st 2004 10p') }, assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1st 2004 10:30p': { run: function() { this.date = Date.parse('July 1st 2004 10:30p') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'July 15th 2004 6 AM': { run: function() { this.date = Date.parse('July 15th 2004 6 AM') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15th 2004 6:45 AM': { run: function() { this.date = Date.parse('July 15th 2004 6:45 AM') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'Jul 15 2004 6AM': { run: function() { this.date = Date.parse('Jul 15 2004 6AM') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'Jul 15 2004 6:45AM': { run: function() { this.date = Date.parse('Jul 15 2004 6:45AM') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 15th 2004 6a': { run: function() { this.date = Date.parse('July 15th 2004 6a') }, assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15th 2004 6:45a': { run: function() { this.date = Date.parse('July 15th 2004 6:45a') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } }, 'July 1 10 PM': { run: function() { this.date = Date.parse('July 1 10 PM') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1 10:30 PM': { run: function() { this.date = Date.parse('July 1 10:30 PM') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'Jul 1 10PM': { run: function() { this.date = Date.parse('Jul 1 10PM') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'Jul 1 10:30PM': { run: function() { this.date = Date.parse('Jul 1 10:30PM') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'July 1 10p': { run: function() { this.date = Date.parse('July 1 10p') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1 10:30p': { run: function() { this.date = Date.parse('July 1 10:30p') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'July 15 6 AM': { run: function() { this.date = Date.parse('July 15 6 AM') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15 6:45 AM': { run: function() { this.date = Date.parse('July 15 6:45 AM') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'Jul 15 6AM': { run: function() { this.date = Date.parse('Jul 15 6AM') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'Jul 15 6:45AM': { run: function() { this.date = Date.parse('Jul 15 6:45AM') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'July 15 6a': { run: function() { this.date = Date.parse('July 15 6a') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15 6:45a': { run: function() { this.date = Date.parse('July 15 6:45a') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'July 1st 10 PM': { run: function() { this.date = Date.parse('July 1st 10 PM') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1st 10:30 PM': { run: function() { this.date = Date.parse('July 1st 10:30 PM') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'Jul 1 10PM': { run: function() { this.date = Date.parse('Jul 1 10PM') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'Jul 1 10:30PM': { run: function() { this.date = Date.parse('Jul 1 10:30PM') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'July 1st 10p': { run: function() { this.date = Date.parse('July 1st 10p') }, assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 } }, 'July 1st 10:30p': { run: function() { this.date = Date.parse('July 1st 10:30p') }, assert: function() { return this.baseline3.compareTo( this.date ) == 0 } }, 'July 15th 6 AM': { run: function() { this.date = Date.parse('July 15th 6 AM') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15th 6:45 AM': { run: function() { this.date = Date.parse('July 15th 6:45 AM') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'Jul 15 6AM': { run: function() { this.date = Date.parse('Jul 15 6AM') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'Jul 15 6:45AM': { run: function() { this.date = Date.parse('Jul 15 6:45AM') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'July 15th 6a': { run: function() { this.date = Date.parse('July 15th 6a') }, assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 } }, 'July 15th 6:45a': { run: function() { this.date = Date.parse('July 15th 6:45a') }, assert: function() { return this.baseline4.compareTo( this.date ) == 0 } }, 'JSON: 2004-07-01T22:30:00': { run: function() { this.date = Date.parse('2004-07-01T22:30:00') }, assert: function() { return this.baseline.compareTo( this.date ) == 0 } }, 'JSON: 2004-07-15T06:45:00': { run: function() { this.date = Date.parse('2004-07-15T06:45:00') }, assert: function() { return this.baseline2.compareTo( this.date ) == 0 } } }, 'Common Formats': { setup: function() { this.d = []; this.d[0] = new Date(2004,6,1,22,30,0,0); this.d[1] = new Date(2004,6,15,6,45,0,0); this.d[2] = Date.today().set( { hour: 22, minute: 30 } ); this.d[3] = Date.today().set( { hour: 6, minute: 45 } ); this.d[4] = Date.today().set( { month: 6, day: 1 } ); this.d[5] = Date.today().set( { month: 6, day: 15 } ); this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } ); this.d[7] = this.d[0].clone().setTimezoneOffset( 0 ); this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' ); }, 'Thursday, July 01, 2004 10:30:00 PM : "dddd, MMMM dd, yyyy h:mm:ss tt"': { run: function() { this.date = Date.parse('Thursday, July 01, 2004 10:30:00 PM') }, assert: function() { return this.d[0].equals( this.date ) } }, 'Thursday, July 01, 2004 : "dddd, MMMM dd, yyyy"': { run: function() { this.date = Date.parse('Thursday, July 01, 2004') }, assert: function() { return this.d[0].clearTime().equals( this.date ) } }, 'Thursday, July 15, 2004 : "dddd, MMMM dd, yyyy"': { run: function() { this.date = Date.parse('Thursday, July 15, 2004') }, assert: function() { return this.d[1].clearTime().equals( this.date ) } }, '10:30:00 PM : "h:mm:ss tt"': { run: function() { this.date = Date.parse('10:30:00 PM') }, assert: function() { return this.d[2].equals( this.date ) } }, '6:45:00 AM : "h:mm:ss tt"': { run: function() { this.date = Date.parse('6:45:00 AM') }, assert: function() { return this.d[3].equals( this.date ) } }, 'July 01 : "MMMM dd"': { run: function() { this.date = Date.parse('July 01') }, assert: function() { return this.d[4].equals( this.date ) } }, 'July 15 : "MMMM dd"': { run: function() { this.date = Date.parse('July 15') }, assert: function() { return this.d[5].equals( this.date ) } }, 'July 2004 : "MMMM, yyyy"': { run: function() { this.date = Date.parse('July 2004') }, assert: function() { return this.d[6].equals( this.date ) } }, '7/1/2004 : "M/d/yyyy"': { run: function() { this.date = Date.parse('7/1/2004') }, assert: function() { return this.d[0].clearTime().equals( this.date ) } }, '7/15/2004 : "M/d/yyyy"': { run: function() { this.date = Date.parse('7/15/2004') }, assert: function() { return this.d[1].clearTime().equals( this.date ) } }, '10:30 PM : "h:mm tt"': { run: function() { this.date = Date.parse('10:30 PM') }, assert: function() { return this.d[2].equals( this.date ) } }, '6:45 AM : "h:mm tt"': { run: function() { this.date = Date.parse('6:45 AM') }, assert: function() { return this.d[3].equals( this.date ) } }, '2004-07-01T22:30:00 : "yyyy-MM-ddTHH:mm:ss"': { run: function() { this.date = Date.parse('2004-07-01T22:30:00') }, assert: function() { return this.d[0].equals( this.date ) } }, '2004-07-15T06:45:00 : "yyyy-MM-ddTHH:mm:ss"': { run: function() { this.date = Date.parse('2004-07-15T06:45:00') }, assert: function() { return this.d[1].equals( this.date ) } }, '2004-07-15 06:45:00 -0400 : "yyyy-MM-dd HH:mm:ss Z"': { run: function() { this.date = Date.parse('2004-07-15 06:45:00 -0400') }, assert: function() { return this.d[8].equals( this.date ) } }, 'Thu, 1 July 2004 22:30:00 GMT : "ddd, dd MMM yyyy HH:mm:ss GMT"': { run: function() { this.date = Date.parse('Thu, 1 July 2004 22:30:00 GMT') }, assert: function() { return this.d[7].equals( this.date ) } } }, 'ISO 8601 Formats': { setup: function() { this.d = []; this.d[0] = new Date(2004,6,1,22,30,0,0); this.d[1] = new Date(2004,6,15,6,45,0,0); this.d[2] = Date.today().set( { hour: 22, minute: 30 } ); this.d[3] = Date.today().set( { hour: 6, minute: 45 } ); this.d[4] = Date.today().set( { month: 6, day: 1 } ); this.d[5] = Date.today().set( { month: 6, day: 15 } ); this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } ); this.d[7] = this.d[0].clone().setTimezoneOffset( 0 ); this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' ); }, '1997 : "YYYY"': { run: function() { }, assert: function() { return Date.today().set({year: 1997, day: 1}).equals( Date.parse('1997') ) } }, '1997-07 : "YYYY-MM"': { run: function() { }, assert: function() { return Date.july().set({year: 1997}).equals( Date.parse('1997-07') ) } }, '1997-07-16 : "YYYY-MM-DD"': { run: function() { }, assert: function() { return Date.july().set({year: 1997, day: 16}).equals( Date.parse('1997-07-16') ) } }, '1997-07-16T19:20 : "YYYY-MM-DDThh:mm"': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,0).equals( Date.parse('1997-07-16T19:20') ) } }, '1997-07-16T19:20 : "YYYY-MM-DDThh:mm" : .parseExact': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,0).equals( Date.parseExact('1997-07-16T19:20',"yyyy-MM-ddTHH:mm") ) } }, '1997-07-16T19:20:15 : "YYYY-MM-DDThh:mm:ss"': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,15).equals( Date.parse('1997-07-16T19:20:15') ) } }, '1997-07-16T19:20:15 : "YYYY-MM-DDThh:mm:ss" : .parseExact': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,15).equals( Date.parseExact('1997-07-16T19:20:15', "yyyy-MM-ddTHH:mm:ss") ) } }, '1997-07-16T19:20+01:00 : "YYYY-MM-DDThh:mmTZD"': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,0).setTimezoneOffset('+0100').equals( Date.parse('1997-07-16T19:20+01:00') ) } }, '1997-07-16T19:20+01:00 : "YYYY-MM-DDThh:mmTZD" : parseExact': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,0).setTimezoneOffset('+0100').equals( Date.parseExact('1997-07-16T19:20+01:00', "yyyy-MM-ddTHH:mmz") ) } }, '1997-07-16T19:20:30+01:00 : "YYYY-MM-DDThh:mm:ssTZD"': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,30).setTimezoneOffset('+0100').equals( Date.parse('1997-07-16T19:20:30+01:00') ) } }, '1997-07-16T19:20:30+01:00 : "YYYY-MM-DDThh:mm:ssTZD" : parseExact': { run: function() { }, assert: function() { return new Date(1997,6,16,19,20,30).setTimezoneOffset('+0100').equals( Date.parseExact('1997-07-16T19:20:30+01:00', "yyyy-MM-ddTHH:mm:ssz") ) } }, }, 'RFC 3339 Formats': { setup: function() { this.d = []; this.d[0] = new Date(2004,6,1,22,30,0,0); this.d[1] = new Date(2004,6,15,6,45,0,0); this.d[2] = Date.today().set( { hour: 22, minute: 30 } ); this.d[3] = Date.today().set( { hour: 6, minute: 45 } ); this.d[4] = Date.today().set( { month: 6, day: 1 } ); this.d[5] = Date.today().set( { month: 6, day: 15 } ); this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } ); this.d[7] = this.d[0].clone().setTimezoneOffset( 0 ); this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' ); }, '1985-04-12T23:20:50': { run: function() { }, assert: function() { return new Date(1985,3,12,23,20,50).equals( Date.parse('1985-04-12T23:20:50') ) } }, '1985-04-12T23:20:50Z': { run: function() { }, assert: function() { return new Date(1985,3,12,23,20,50).equals( Date.parse('1985-04-12T23:20:50Z') ) } }, 'Much faster with Date.parseExact("1985-04-12T23:20:50Z", "yyyy-MM-ddTHH:mm:ssZ")': { run: function() { }, assert: function() { return new Date(1985,3,12,23,20,50).equals( Date.parseExact('1985-04-12T23:20:50Z', "yyyy-MM-ddTHH:mm:ssZ") ) } } }, 'Quriks: Date.parse cannot handle ISO Dates with milliseconds and tz data, use new Date() instead': { '1997-07-16T19:20:30.045+01:00 : "YYYY-MM-DDThh:mm:ss.sTZD"': { run: function() { var ISOString = '1997-07-16T19:20:30.045+0100'; this.date = new Date(1997,6,16,19,20,30,45).setTimezoneOffset('+0100'); this.shouldBeNull = Date.parse(ISOString); this.fromNew = new Date(ISOString); }, assert: function() { return this.shouldBeNull === null && this.date.equals(this.fromNew); } } }, });