index.js 954 B

123456789101112131415161718192021
  1. var MILLISECONDS_IN_MINUTE = 60000
  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. module.exports = function getTimezoneOffsetInMilliseconds (dirtyDate) {
  14. var date = new Date(dirtyDate.getTime())
  15. var baseTimezoneOffset = date.getTimezoneOffset()
  16. date.setSeconds(0, 0)
  17. var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE
  18. return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset
  19. }