54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
import { constructFrom } from "./constructFrom.js";
|
|
|
|
/**
|
|
* @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, constructor) {
|
|
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) {
|
|
return (
|
|
typeof constructor === "function" &&
|
|
constructor.prototype?.constructor === constructor
|
|
);
|
|
}
|
|
|
|
// Fallback for modularized imports:
|
|
export default transpose;
|