/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ // @ts-nocheck import { constructFrom } from '../constructFrom/index.ts'; import type { ContextFn, GenericDateConstructor } from '../types.ts'; /** * @name transpose * @category Generic Helpers * @summary Transpose the date to the given constructor. * * @description * The function transposes the date to the given constructor. It helps you * to transpose the date in the system time zone to say `UTCDate` or any other * date extension. * * @typeParam InputDate - The input `Date` type derived from the passed argument. * @typeParam ResultDate - The result `Date` type derived from the passed constructor. * * @param date - The date to use values from * @param constructor - The date constructor to use * * @returns Date transposed to the given constructor * * @example * // Create July 10, 2022 00:00 in locale time zone * const date = new Date(2022, 6, 10) * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)' * * @example * // Transpose the date to July 10, 2022 00:00 in UTC * transpose(date, UTCDate) * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)' */ export function transpose( date: InputDate, constructor: ResultDate | GenericDateConstructor | ContextFn, ): ResultDate { const date_ = isConstructor(constructor) ? new constructor(0) : constructFrom(constructor, 0); date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); date_.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()); return date_; } function isConstructor(constructor: unknown): constructor is GenericDateConstructor { return typeof constructor === 'function' && constructor.prototype?.constructor === constructor; } /* eslint-enable */