{"version":3,"file":"DateObject.mjs","sourceRoot":"","sources":["../../src/DateObject.ts"],"names":[],"mappings":"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","sourcesContent":["import { Hash } from './interfaces';\n\nexport interface KwArgs {\n\tdayOfMonth?: number;\n\thours?: number;\n\tmilliseconds?: number;\n\tminutes?: number;\n\tmonth: number;\n\tseconds?: number;\n\tyear: number;\n}\n\nexport interface OperationKwArgs {\n\tdays?: number;\n\thours?: number;\n\tmilliseconds?: number;\n\tminutes?: number;\n\tmonths?: number;\n\tseconds?: number;\n\tyears?: number;\n}\n\n/**\n * The properties of a complete date\n */\nexport interface DateProperties {\n\tdayOfMonth: number;\n\treadonly dayOfWeek: number;\n\treadonly daysInMonth: number;\n\thours: number;\n\treadonly isLeapYear: boolean;\n\tmilliseconds: number;\n\tminutes: number;\n\tmonth: number;\n\tseconds: number;\n\tyear: number;\n}\n\nconst days = [NaN, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst isLeapYear = (function() {\n\tconst date = new Date();\n\tfunction isLeapYear(year: number): boolean {\n\t\tdate.setFullYear(year, 1, 29);\n\t\treturn date.getDate() === 29;\n\t}\n\treturn isLeapYear;\n})();\n\nconst operationOrder = ['years', 'months', 'days', 'hours', 'minutes', 'seconds', 'milliseconds'];\nconst operationHash: Hash<string> = Object.create(null, {\n\tdays: { value: 'Date' },\n\thours: { value: 'UTCHours' },\n\tmilliseconds: { value: 'UTCMilliseconds' },\n\tminutes: { value: 'UTCMinutes' },\n\tmonths: { value: 'Month' },\n\tseconds: { value: 'UTCSeconds' },\n\tyears: { value: 'FullYear' }\n});\n\nexport default class DateObject implements DateProperties {\n\tstatic parse(str: string): DateObject {\n\t\treturn new DateObject(Date.parse(str));\n\t}\n\n\tstatic now(): DateObject {\n\t\treturn new DateObject(Date.now());\n\t}\n\n\tprivate readonly _date: Date;\n\treadonly utc: DateProperties;\n\n\tconstructor(value: number);\n\tconstructor(value: string);\n\tconstructor(value: Date);\n\tconstructor(value: KwArgs);\n\tconstructor();\n\tconstructor(value?: any) {\n\t\tlet _date: Date;\n\t\tif (!arguments.length) {\n\t\t\t_date = new Date();\n\t\t} else if (value instanceof Date) {\n\t\t\t_date = new Date(+value);\n\t\t} else if (typeof value === 'number' || typeof value === 'string') {\n\t\t\t_date = new Date(<any>value);\n\t\t} else {\n\t\t\t_date = new Date(\n\t\t\t\tvalue.year,\n\t\t\t\tvalue.month - 1,\n\t\t\t\tvalue.dayOfMonth || 1,\n\t\t\t\tvalue.hours || 0,\n\t\t\t\tvalue.minutes || 0,\n\t\t\t\tvalue.seconds || 0,\n\t\t\t\tvalue.milliseconds || 0\n\t\t\t);\n\t\t}\n\n\t\tthis._date = _date;\n\t\tconst self = this;\n\t\tthis.utc = {\n\t\t\tget isLeapYear(this: DateObject): boolean {\n\t\t\t\treturn isLeapYear(this.year);\n\t\t\t},\n\t\t\tget daysInMonth(this: DateObject): number {\n\t\t\t\tconst month = this.month;\n\n\t\t\t\tif (month === 2 && this.isLeapYear) {\n\t\t\t\t\treturn 29;\n\t\t\t\t}\n\t\t\t\treturn days[month];\n\t\t\t},\n\n\t\t\tget year(): number {\n\t\t\t\treturn self._date.getUTCFullYear();\n\t\t\t},\n\t\t\tset year(year: number) {\n\t\t\t\tself._date.setUTCFullYear(year);\n\t\t\t},\n\n\t\t\tget month(): number {\n\t\t\t\treturn self._date.getUTCMonth() + 1;\n\t\t\t},\n\t\t\tset month(month: number) {\n\t\t\t\tself._date.setUTCMonth(month - 1);\n\t\t\t},\n\n\t\t\tget dayOfMonth(): number {\n\t\t\t\treturn self._date.getUTCDate();\n\t\t\t},\n\t\t\tset dayOfMonth(day: number) {\n\t\t\t\tself._date.setUTCDate(day);\n\t\t\t},\n\n\t\t\tget hours(): number {\n\t\t\t\treturn self._date.getUTCHours();\n\t\t\t},\n\t\t\tset hours(hours: number) {\n\t\t\t\tself._date.setUTCHours(hours);\n\t\t\t},\n\n\t\t\tget minutes(): number {\n\t\t\t\treturn self._date.getUTCMinutes();\n\t\t\t},\n\t\t\tset minutes(minutes: number) {\n\t\t\t\tself._date.setUTCMinutes(minutes);\n\t\t\t},\n\n\t\t\tget seconds(): number {\n\t\t\t\treturn self._date.getUTCSeconds();\n\t\t\t},\n\t\t\tset seconds(seconds: number) {\n\t\t\t\tself._date.setUTCSeconds(seconds);\n\t\t\t},\n\n\t\t\tget milliseconds(): number {\n\t\t\t\treturn self._date.getUTCMilliseconds();\n\t\t\t},\n\t\t\tset milliseconds(milliseconds: number) {\n\t\t\t\tself._date.setUTCMilliseconds(milliseconds);\n\t\t\t},\n\n\t\t\tget dayOfWeek(): number {\n\t\t\t\treturn self._date.getUTCDay();\n\t\t\t},\n\n\t\t\ttoString: function(): string {\n\t\t\t\treturn self._date.toUTCString();\n\t\t\t}\n\t\t} as any;\n\t}\n\n\tget isLeapYear(): boolean {\n\t\treturn isLeapYear(this.year);\n\t}\n\n\tget daysInMonth(): number {\n\t\tconst month = this.month;\n\n\t\tif (month === 2 && this.isLeapYear) {\n\t\t\treturn 29;\n\t\t}\n\t\treturn days[month];\n\t}\n\n\tget year(): number {\n\t\treturn this._date.getFullYear();\n\t}\n\tset year(year: number) {\n\t\tconst dayOfMonth = this.dayOfMonth;\n\n\t\tthis._date.setFullYear(year);\n\n\t\tif (this.dayOfMonth < dayOfMonth) {\n\t\t\tthis.dayOfMonth = 0;\n\t\t}\n\t}\n\n\tget month(): number {\n\t\treturn this._date.getMonth() + 1;\n\t}\n\tset month(month: number) {\n\t\tconst dayOfMonth = this.dayOfMonth;\n\n\t\tthis._date.setMonth(month - 1);\n\n\t\tif (this.dayOfMonth < dayOfMonth) {\n\t\t\tthis.dayOfMonth = 0;\n\t\t}\n\t}\n\n\tget dayOfMonth(): number {\n\t\treturn this._date.getDate();\n\t}\n\tset dayOfMonth(day: number) {\n\t\tthis._date.setDate(day);\n\t}\n\n\tget hours(): number {\n\t\treturn this._date.getHours();\n\t}\n\tset hours(hours: number) {\n\t\tthis._date.setHours(hours);\n\t}\n\n\tget minutes(): number {\n\t\treturn this._date.getMinutes();\n\t}\n\tset minutes(minutes: number) {\n\t\tthis._date.setMinutes(minutes);\n\t}\n\n\tget seconds(): number {\n\t\treturn this._date.getSeconds();\n\t}\n\tset seconds(seconds: number) {\n\t\tthis._date.setSeconds(seconds);\n\t}\n\n\tget milliseconds(): number {\n\t\treturn this._date.getMilliseconds();\n\t}\n\tset milliseconds(milliseconds: number) {\n\t\tthis._date.setMilliseconds(milliseconds);\n\t}\n\n\tget time(): number {\n\t\treturn this._date.getTime();\n\t}\n\tset time(time: number) {\n\t\tthis._date.setTime(time);\n\t}\n\n\tget dayOfWeek(): number {\n\t\treturn this._date.getDay();\n\t}\n\tget timezoneOffset(): number {\n\t\treturn this._date.getTimezoneOffset();\n\t}\n\n\tadd(value: number): DateObject;\n\tadd(value: OperationKwArgs): DateObject;\n\tadd(value: any): DateObject {\n\t\tconst result = new DateObject(this.time);\n\n\t\tif (typeof value === 'number') {\n\t\t\tresult.time += value;\n\t\t} else {\n\t\t\t// Properties have to be added in a particular order to properly handle\n\t\t\t// date overshoots in month and year calculations\n\t\t\toperationOrder.forEach((property: string): void => {\n\t\t\t\tif (!(property in value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst dateMethod = operationHash[property];\n\t\t\t\t(<any>result._date)[`set${dateMethod}`]((<any>this._date)[`get${dateMethod}`]() + value[property]);\n\n\t\t\t\tif ((property === 'years' || property === 'months') && result.dayOfMonth < this.dayOfMonth) {\n\t\t\t\t\t// Set the day of the month to 0 to move the date to the first day of the previous\n\t\t\t\t\t// month to fix overshoots when adding a month and the date is the 31st or adding\n\t\t\t\t\t// a year and the date is the 29th\n\t\t\t\t\tresult.dayOfMonth = 0;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tcompare(value: DateObject): number {\n\t\tconst result = this.time - value.time;\n\t\tif (result > 0) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (result < 0) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tcompareDate(value: KwArgs): number {\n\t\tconst left = new DateObject(this);\n\t\tconst right = new DateObject(value);\n\n\t\tleft._date.setHours(0, 0, 0, 0);\n\t\tright._date.setHours(0, 0, 0, 0);\n\n\t\treturn left.compare(right);\n\t}\n\n\tcompareTime(value: KwArgs): number {\n\t\tconst left = new DateObject(this);\n\t\tconst right = new DateObject(value);\n\n\t\tleft._date.setFullYear(0, 0, 0);\n\t\tright._date.setFullYear(0, 0, 0);\n\n\t\treturn left.compare(right);\n\t}\n\n\ttoString(): string {\n\t\treturn this._date.toString();\n\t}\n\ttoDateString(): string {\n\t\treturn this._date.toDateString();\n\t}\n\ttoTimeString(): string {\n\t\treturn this._date.toTimeString();\n\t}\n\ttoLocaleString(): string {\n\t\treturn this._date.toLocaleString();\n\t}\n\ttoLocaleDateString(): string {\n\t\treturn this._date.toLocaleDateString();\n\t}\n\ttoLocaleTimeString(): string {\n\t\treturn this._date.toLocaleTimeString();\n\t}\n\ttoISOString(): string {\n\t\treturn this._date.toISOString();\n\t}\n\ttoJSON(key?: any): string {\n\t\treturn this._date.toJSON(key);\n\t}\n\tvalueOf(): number {\n\t\treturn this._date.valueOf();\n\t}\n}\n"]}