diff --git a/README.md b/README.md index f030f165..2812c845 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ React Native date & time picker component for iOS, Android and Windows. - [`value` (`required`)](#value-required) - [`maximumDate` (`optional`)](#maximumdate-optional) - [`minimumDate` (`optional`)](#minimumdate-optional) - - [`timeZoneOffsetInMinutes` (`optional`, `iOS only`)](#timezoneoffsetinminutes-optional-ios-only) + - [`timeZoneOffsetInMinutes` (`optional`, `iOS or Android only`)](#timezoneoffsetinminutes-optional-ios-only) - [`timeZoneOffsetInSeconds` (`optional`, `Windows only`)](#timezoneoffsetinsecond-optional-windows-only) - [`dayOfWeekFormat` (`optional`, `Windows only`)](#dayOfWeekFormat-optional-windows-only) - [`dateFormat` (`optional`, `Windows only`)](#dateFormat-optional-windows-only) @@ -257,7 +257,7 @@ Defines the minimum date that can be selected. Note that on Android, this only w ``` -#### `timeZoneOffsetInMinutes` (`optional`, `iOS only`) +#### `timeZoneOffsetInMinutes` (`optional`, `iOS and Android only`) Allows changing of the timeZone of the date picker. By default it uses the device's time zone. diff --git a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNConstants.java b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNConstants.java index ee090fcc..5101bbef 100644 --- a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNConstants.java +++ b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNConstants.java @@ -9,6 +9,7 @@ public final class RNConstants { public static final String ARG_IS24HOUR = "is24Hour"; public static final String ARG_DISPLAY = "display"; public static final String ARG_NEUTRAL_BUTTON_LABEL = "neutralButtonLabel"; + public static final String ARG_TZOFFSET_MIN = "timeZoneOffsetInMinutes"; public static final String ACTION_DATE_SET = "dateSetAction"; public static final String ACTION_TIME_SET = "timeSetAction"; public static final String ACTION_DISMISSED = "dismissedAction"; diff --git a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNDate.java b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNDate.java index a53a4e60..5ba52f3e 100644 --- a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNDate.java +++ b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNDate.java @@ -1,6 +1,7 @@ package com.reactcommunity.rndatetimepicker; import java.util.Calendar; +import java.util.TimeZone; import android.os.Bundle; public class RNDate { @@ -8,6 +9,11 @@ public class RNDate { public RNDate(Bundle args) { now = Calendar.getInstance(); + if (args != null && args.containsKey(RNConstants.ARG_TZOFFSET_MIN)) { + now.setTimeZone(TimeZone.getTimeZone("GMT")); + Integer timeZoneOffsetInMinutes = args.getInt(RNConstants.ARG_TZOFFSET_MIN); + now.add(Calendar.MILLISECOND, timeZoneOffsetInMinutes * 60000); + } if (args != null && args.containsKey(RNConstants.ARG_VALUE)) { set(args.getLong(RNConstants.ARG_VALUE)); diff --git a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNTimePickerDialogModule.java b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNTimePickerDialogModule.java index 05abbfc3..b8b5c860 100644 --- a/android/src/main/java/com/reactcommunity/rndatetimepicker/RNTimePickerDialogModule.java +++ b/android/src/main/java/com/reactcommunity/rndatetimepicker/RNTimePickerDialogModule.java @@ -148,6 +148,9 @@ private Bundle createFragmentArguments(ReadableMap options) { if (options.hasKey(RNConstants.ARG_INTERVAL) && !options.isNull(RNConstants.ARG_INTERVAL)) { args.putInt(RNConstants.ARG_INTERVAL, options.getInt(RNConstants.ARG_INTERVAL)); } + if (options.hasKey(RNConstants.ARG_TZOFFSET_MIN) && !options.isNull(RNConstants.ARG_TZOFFSET_MIN)) { + args.putInt(RNConstants.ARG_TZOFFSET_MIN, options.getInt(RNConstants.ARG_TZOFFSET_MIN)); + } return args; } } diff --git a/example/App.js b/example/App.js index 07374a55..3908256c 100644 --- a/example/App.js +++ b/example/App.js @@ -60,6 +60,7 @@ const MINUTE_INTERVALS = [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]; export const App = () => { const [date, setDate] = useState(new Date(1598051730000)); + const [tzOffsetInMinutes, setTzOffsetInMinutes] = useState(0); const [mode, setMode] = useState(MODE_VALUES[0]); const [show, setShow] = useState(false); const [color, setColor] = useState(); @@ -223,10 +224,20 @@ export const App = () => { title="hide picker" /> + +