Как угадать часовой пояс пользователя, используя date-fns в приложении VueJS? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть требование, где мне нужно показать время пользователя в его местном часовом поясе.Это необходимо сделать с помощью date-fns.

Следующий код проверяет текущее время, а затем, учитывая часовой пояс, переводит его в местное время в соответствии с часовым поясом.

const { formatToTimeZone } = require('date-fns-timezone')

let date = new Date()
const format = 'D.M.YYYY HH:mm:ss [GMT]Z (z)'
const output = formatToTimeZone(date, format, { timeZone: 'Asia/Calcutta' })

Однако,как мне угадать часовой пояс пользователя на лету?

В moment.js вы можете получить его с помощью moment.tz.guess().Но как я могу сделать это без moment.js и с помощью date-fns?

https://runkit.com/embed/835tsn9a87so

ОБНОВЛЕНИЕ: я буду использовать это в приложении VueJS.Так что, если есть какие-либо другие связанные решения, они также приветствуются.Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Чтобы получить идентификатор часового пояса IANA пользователя, большинство современных браузеров теперь поддерживают следующее:

Intl.DateTimeFormat().resolvedOptions().timeZone

Тем не менее, по обычной причине вам нужно использовать formatToTimeZone из date-fns-timezone - это когда вам нужно использовать другой часовой пояс, отличный от локальной зоны пользователя.В противном случае вы обычно можете просто использовать функцию format из date-fns.

Однако в вашем случае вы также пытаетесь использовать спецификатор формата z для отображениясокращение часового пояса пользователя.Это не предоставляется date-fns напрямую, поэтому, если это критично, вам действительно нужно получить часовой пояс пользователя с API-интерфейсом Intl, показанным выше, и использовать formatToTimeZone.

Не забывайте, хотячто эти сокращения соответствуют любым данным IANA, которые представлены только на английском языке, и не имеют сокращений для каждого часового пояса.Для тех, кто этого не делает, вместо этого вы увидите числовое значение, например -02.

. Кроме того, многие сокращения могут быть неоднозначными (например, I в IST, возможно, означающие Индию, Израиль).или Ирландия и многие другие ...).Таким образом, в большинстве случаев, если вам не нужно сокращение, вам часто лучше без него.

...