UNPKG

chrono-convert

Version:

Effortlessly manipulate and convert time units with Chrono: a fluent, chainable interface for clear and precise time calculations. Perfect for adding time-based logic to your applications with just a few lines of code.

1 lines 11.7 kB
{"version":3,"sources":["../src/chrono-convert.ts"],"names":["ChronoConvert","_ChronoConvert","value","unit","chrono_convert_default"],"mappings":"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","sourcesContent":["import { MINUTE, DAY, HOUR, MONTH, WEEK, YEAR, QUARTER } from \"./constants\";\nimport type { Unit } from \"./types\";\n\n/**\n * Class representing a Time Converter.\n * @example\n * const time = ChronoConvert.minutes(5);\n * console.log(time.toSeconds()); // Outputs the equivalent seconds\n */\nclass ChronoConvert {\n value: number;\n\n /**\n * @private\n * @param {number} value - The number of seconds.\n */\n private constructor(value: number) {\n this.value = value;\n }\n\n /**\n * Creates a ChronoConvert instance from milliseconds.\n * @param {number} value - The number of milliseconds.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.milliseconds(5000);\n * console.log(time.toSeconds()); // Outputs 5\n */\n static milliseconds(value: number): ChronoConvert {\n return new ChronoConvert(value / 1000);\n }\n\n /**\n * Creates a ChronoConvert instance from milliseconds.\n * @param {number} value - The number of milliseconds.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.ms(5000);\n * console.log(time.toSeconds()); // Outputs 5\n */\n static ms(value: number): ChronoConvert {\n return ChronoConvert.milliseconds(value);\n }\n\n /**\n * Creates a ChronoConvert instance from seconds.\n * @param {number} value - The number of seconds.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.seconds(5);\n * console.log(time.toSeconds()); // Outputs 5\n */\n static seconds(value: number): ChronoConvert {\n return new ChronoConvert(value);\n }\n\n /**\n * Creates a ChronoConvert instance from minutes.\n * @param {number} value - The number of minutes.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.minutes(5);\n * console.log(time.toSeconds()); // Outputs 300\n */\n static minutes(value: number): ChronoConvert {\n return new ChronoConvert(value * MINUTE);\n }\n\n /**\n * Creates a ChronoConvert instance from hours.\n * @param {number} value - The number of hours.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.hours(5);\n * console.log(time.toSeconds()); // Outputs 18000\n */\n static hours(value: number): ChronoConvert {\n return new ChronoConvert(value * HOUR);\n }\n\n /**\n * Creates a ChronoConvert instance from days.\n * @param {number} value - The number of days.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.days(5);\n * console.log(time.toSeconds()); // Outputs 432000\n */\n static days(value: number): ChronoConvert {\n return new ChronoConvert(value * DAY);\n }\n\n /**\n * Creates a ChronoConvert instance from weeks.\n * @param {number} value - The number of weeks.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.weeks(5);\n * console.log(time.toSeconds()); // Outputs 3024000\n */\n static weeks(value: number): ChronoConvert {\n return new ChronoConvert(value * WEEK);\n }\n\n /**\n * Creates a ChronoConvert instance from months.\n * @param {number} value - The number of months.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.months(5);\n * console.log(time.toSeconds()); // Outputs 13140000\n */\n static months(value: number): ChronoConvert {\n return new ChronoConvert(value * MONTH);\n }\n\n /**\n * Creates a ChronoConvert instance from quarters.\n * @param {number} value - The number of quarters.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.quarters(5);\n * console.log(time.toSeconds()); // Outputs 78840000\n */\n static quarters(value: number): ChronoConvert {\n return new ChronoConvert(value * MONTH * 3);\n }\n\n /**\n * Creates a ChronoConvert instance from years.\n * @param {number} value - The number of years.\n * @returns {ChronoConvert} - New instance of ChronoConvert.\n * @example\n * const time = ChronoConvert.years(5);\n * console.log(time.toSeconds()); // Outputs 157680000\n */\n static years(value: number): ChronoConvert {\n return new ChronoConvert(value * YEAR);\n }\n\n /**\n * @example\n * const time = ChronoConvert.from(1500, 'seconds');\n * console.log(time.toSeconds()); // Outputs 1500\n */\n static from(value: number, unit: Unit) {\n return new ChronoConvert(ChronoConvert.getValueByUnit(value, unit));\n }\n\n private fixValue(value: number): number {\n return Math.round(value * 10000) / 10000;\n }\n\n private static getValueByUnit(value: number, unit: Unit): number {\n const valueByUnit: Record<Unit, number> = {\n milliseconds: value / 1000,\n ms: value / 1000,\n seconds: value,\n minutes: value * MINUTE,\n hours: value * HOUR,\n days: value * DAY,\n weeks: value * WEEK,\n months: value * MONTH,\n quarters: value * QUARTER,\n years: value * YEAR,\n };\n\n return valueByUnit[unit];\n }\n\n /**\n * @example\n * const time = ChronoConvert.minutes(5).add(5, 'seconds');\n * console.log(time.toSeconds()); // Outputs 305\n */\n add(value: number, unit: Unit): ChronoConvert {\n return new ChronoConvert(\n this.value + ChronoConvert.getValueByUnit(value, unit)\n );\n }\n\n /**\n * @example\n * const time = ChronoConvert.minutes(5).subtract(5, 'seconds');\n * console.log(time.toSeconds()); // Outputs 295\n */\n subtract(value: number, unit: Unit): ChronoConvert {\n return new ChronoConvert(\n this.value - ChronoConvert.getValueByUnit(value, unit)\n );\n }\n\n /**\n * @example\n * const time = ChronoConvert.minutes(5).to('seconds');\n * console.log(time); // Outputs 300\n */\n to(unit: Unit): number {\n const valueByUnit: Record<Unit, number> = {\n milliseconds: this.toMilliseconds(),\n ms: this.toMilliseconds(),\n seconds: this.toSeconds(),\n minutes: this.toMinutes(),\n hours: this.toHours(),\n days: this.toDays(),\n weeks: this.toWeeks(),\n months: this.toMonths(),\n quarters: this.toQuarters(),\n years: this.toYears(),\n };\n\n return valueByUnit[unit];\n }\n\n /**\n * Converts the time to milliseconds.\n * @returns {number} - The time in milliseconds.\n * @example\n * const time = ChronoConvert.seconds(2);\n * console.log(time.toMilliseconds()); // Outputs 2000\n */\n toMilliseconds(): number {\n return this.fixValue(this.value * 1000);\n }\n\n /**\n * Converts the time to milliseconds.\n * @returns {number} - The time in milliseconds.\n * @example\n * const time = ChronoConvert.seconds(2);\n * console.log(time.toMs()); // Outputs 2000\n */\n toMs(): number {\n return this.toMilliseconds();\n }\n\n /**\n * Converts the time to seconds.\n * @returns {number} - The time in seconds.\n * @example\n * const time = ChronoConvert.minutes(2);\n * console.log(time.toSeconds()); // Outputs 120\n */\n toSeconds(): number {\n return this.fixValue(this.value);\n }\n\n /**\n * Converts the time to minutes.\n * @returns {number} - The time in minutes.\n * @example\n * const time = ChronoConvert.seconds(120);\n * console.log(time.toMinutes()); // Outputs 2\n */\n toMinutes(): number {\n return this.fixValue(this.value / MINUTE);\n }\n\n /**\n * Converts the time to hours.\n * @returns {number} - The time in hours.\n * @example\n * const time = ChronoConvert.seconds(7200);\n * console.log(time.toHours()); // Outputs 2\n */\n toHours(): number {\n return this.fixValue(this.value / HOUR);\n }\n\n /**\n * Converts the time to days.\n * @returns {number} - The time in days.\n * @example\n * const time = ChronoConvert.seconds(172800);\n * console.log(time.toDays()); // Outputs 2\n */\n toDays(): number {\n return this.fixValue(this.value / DAY);\n }\n\n /**\n * Converts the time to weeks.\n * @returns {number} - The time in weeks.\n * @example\n * const time = ChronoConvert.seconds(1209600);\n * console.log(time.toWeeks()); // Outputs 2\n */\n toWeeks(): number {\n return this.fixValue(this.value / WEEK);\n }\n\n /**\n * Converts the time to months.\n * @returns {number} - The time in months.\n * @example\n * const time = ChronoConvert.seconds(5256000);\n * console.log(time.toMonths()); // Outputs 2\n */\n toMonths(): number {\n return this.fixValue(this.value / MONTH);\n }\n\n /**\n * Converts the time to quarters.\n * @returns {number} - The time in quarters.\n * @example\n * const time = ChronoConvert.seconds(15768000);\n * console.log(time.toQuarters()); // Outputs 2\n */\n toQuarters(): number {\n return this.fixValue(this.value / QUARTER);\n }\n\n /**\n * Converts the time to years.\n * @returns {number} - The time in years.\n * @example\n * const time = ChronoConvert.seconds(63072000);\n * console.log(time.toYears()); // Outputs 2\n */\n toYears(): number {\n return this.fixValue(this.value / YEAR);\n }\n\n toString(): string {\n return `${this.value}`;\n }\n}\n\nexport default ChronoConvert;\n"]}