Подтвердить что ты не робот

Получить часовой пояс с помощью React Native

Я хотел бы получить часовой пояс для пользователя телефона, чтобы добавить или вычесть его в UTC, который я получаю из своего API, а затем выполнять операции над ними (например, для уведомлений).

Я только нашел, как добавить смещение с DatePickerIOS, но ничего больше... Можно ли получить его с фронта?

4b9b3361

Ответ 1

Довольно многое, что вы могли бы сделать в JavaScript в браузере (за исключением, конечно), вы можете сделать в React Native. Я бы инициировал новый объект даты и вызывал getTimezoneOffset() на нем, чтобы получить количество минут, когда часовой пояс смещен локально.

var date = new Date();
var offsetInHours = date.getTimezoneOffset() / 60;

Ответ 2

Я обнаружил, что лучше получить фактический идентификатор часового пояса (например, America/New_York), а затем настроить серверную программу для работы с использованием этого часового пояса в начале. Чтобы получить это, используйте библиотеку response-native-device-info: https://www.npmjs.com/package/react-native-device-info

import DeviceInfo from 'react-native-device-info';

console.log(DeviceInfo.getTimezone());   //   'America/New_York'

Если вы получили сообщение об ошибке "tvOS" во время компиляции, посмотрите это исправление: https://github.com/rebeccahughes/react-native-device-info/issues/286

Ответ 3

Я бы рекомендовал не использовать смещение, поскольку он не предназначен для летнего или любых других настроек, которые может выполнять операционная система.

Вместо этого JavaScript сделает для вас конвертацию из UTC. Этот ответ SO показывает пример: Преобразовать время даты UTC в локальное время с использованием JavaScript

Если вам нужно преобразовать в произвольный часовой пояс, вы должны посмотреть на использование библиотеки, например moment.js, по тем же причинам, о которых я говорил выше.

Ответ 4

Если вы строите свой проект с Expo, вы можете использовать объект Localization.

Импортировать:

import { Localization } from 'expo';

Использование:

console.log(Localization.timezone)

Текущий часовой пояс вернется в формате отображения, например, America/Los_Angeles.