summaryrefslogtreecommitdiff
path: root/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js')
-rw-r--r--date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js
new file mode 100644
index 0000000..0b637c4
--- /dev/null
+++ b/date-fns/src/_lib/getTimezoneOffsetInMilliseconds/index.js
@@ -0,0 +1,26 @@
+/**
+ * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
+ * They usually appear for dates that denote time before the timezones were introduced
+ * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
+ * and GMT+01:00:00 after that date)
+ *
+ * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
+ * which would lead to incorrect calculations.
+ *
+ * This function returns the timezone offset in milliseconds that takes seconds in account.
+ */
+export default function getTimezoneOffsetInMilliseconds(date) {
+ const utcDate = new Date(
+ Date.UTC(
+ date.getFullYear(),
+ date.getMonth(),
+ date.getDate(),
+ date.getHours(),
+ date.getMinutes(),
+ date.getSeconds(),
+ date.getMilliseconds()
+ )
+ )
+ utcDate.setUTCFullYear(date.getFullYear())
+ return date.getTime() - utcDate.getTime()
+}