@@ -12,6 +12,7 @@ import {
1212 NEUTRAL_BUTTON_ACTION ,
1313 ANDROID_DISPLAY ,
1414 ANDROID_MODE ,
15+ MIN_MS ,
1516} from './constants' ;
1617import pickers from './picker' ;
1718import invariant from 'invariant' ;
@@ -38,6 +39,7 @@ function getPicker({
3839 maximumDate,
3940 neutralButtonLabel,
4041 minuteInterval,
42+ timeZoneOffsetInMinutes,
4143} ) {
4244 switch ( mode ) {
4345 case MODE_TIME :
@@ -47,6 +49,7 @@ function getPicker({
4749 minuteInterval,
4850 is24Hour,
4951 neutralButtonLabel,
52+ timeZoneOffsetInMinutes,
5053 } ) ;
5154 case MODE_DATE :
5255 default :
@@ -72,6 +75,7 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
7275 maximumDate,
7376 neutralButtonLabel,
7477 minuteInterval,
78+ timeZoneOffsetInMinutes,
7579 } = props ;
7680 const valueTimestamp = value . getTime ( ) ;
7781
@@ -92,11 +96,12 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
9296 maximumDate,
9397 neutralButtonLabel,
9498 minuteInterval,
99+ timeZoneOffsetInMinutes,
95100 } ) ;
96101
97102 picker . then (
98103 function resolve ( { action, day, month, year, minute, hour} ) {
99- const date = new Date ( valueTimestamp ) ;
104+ let date = new Date ( valueTimestamp ) ;
100105 const event : AndroidEvent = {
101106 type : 'set' ,
102107 nativeEvent : { } ,
@@ -109,7 +114,14 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
109114 break ;
110115
111116 case TIME_SET_ACTION :
112- event . nativeEvent . timestamp = date . setHours ( hour , minute ) ;
117+ date . setHours ( hour , minute ) ;
118+ if ( timeZoneOffsetInMinutes !== undefined ) {
119+ const offset =
120+ date . getTimezoneOffset ( ) * MIN_MS +
121+ timeZoneOffsetInMinutes * MIN_MS ;
122+ date = new Date ( date . getTime ( ) - offset ) ;
123+ }
124+ event . nativeEvent . timestamp = date ;
113125 onChange ( event , date ) ;
114126 break ;
115127
0 commit comments