transpose.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. exports.transpose = transpose;
  3. var _index = require("./constructFrom.js");
  4. /**
  5. * @name transpose
  6. * @category Generic Helpers
  7. * @summary Transpose the date to the given constructor.
  8. *
  9. * @description
  10. * The function transposes the date to the given constructor. It helps you
  11. * to transpose the date in the system time zone to say `UTCDate` or any other
  12. * date extension.
  13. *
  14. * @typeParam DateInputType - The input `Date` type derived from the passed argument.
  15. * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.
  16. *
  17. * @param fromDate - The date to use values from
  18. * @param constructor - The date constructor to use
  19. *
  20. * @returns Date transposed to the given constructor
  21. *
  22. * @example
  23. * // Create July 10, 2022 00:00 in locale time zone
  24. * const date = new Date(2022, 6, 10)
  25. * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'
  26. *
  27. * @example
  28. * // Transpose the date to July 10, 2022 00:00 in UTC
  29. * transpose(date, UTCDate)
  30. * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'
  31. */
  32. function transpose(fromDate, constructor) {
  33. const date =
  34. constructor instanceof Date
  35. ? (0, _index.constructFrom)(constructor, 0)
  36. : new constructor(0);
  37. date.setFullYear(
  38. fromDate.getFullYear(),
  39. fromDate.getMonth(),
  40. fromDate.getDate(),
  41. );
  42. date.setHours(
  43. fromDate.getHours(),
  44. fromDate.getMinutes(),
  45. fromDate.getSeconds(),
  46. fromDate.getMilliseconds(),
  47. );
  48. return date;
  49. }