getTimezoneOffsetInMilliseconds.js 992 B

1234567891011121314151617181920212223242526272829
  1. import { toDate } from "../toDate.js";
  2. /**
  3. * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
  4. * They usually appear for dates that denote time before the timezones were introduced
  5. * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
  6. * and GMT+01:00:00 after that date)
  7. *
  8. * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
  9. * which would lead to incorrect calculations.
  10. *
  11. * This function returns the timezone offset in milliseconds that takes seconds in account.
  12. */
  13. export function getTimezoneOffsetInMilliseconds(date) {
  14. const _date = toDate(date);
  15. const utcDate = new Date(
  16. Date.UTC(
  17. _date.getFullYear(),
  18. _date.getMonth(),
  19. _date.getDate(),
  20. _date.getHours(),
  21. _date.getMinutes(),
  22. _date.getSeconds(),
  23. _date.getMilliseconds(),
  24. ),
  25. );
  26. utcDate.setUTCFullYear(_date.getFullYear());
  27. return +date - +utcDate;
  28. }