@@ -12,6 +12,7 @@ import {
12
12
NEUTRAL_BUTTON_ACTION ,
13
13
ANDROID_DISPLAY ,
14
14
ANDROID_MODE ,
15
+ MIN_MS ,
15
16
} from './constants' ;
16
17
import pickers from './picker' ;
17
18
import invariant from 'invariant' ;
@@ -38,6 +39,7 @@ function getPicker({
38
39
maximumDate,
39
40
neutralButtonLabel,
40
41
minuteInterval,
42
+ timeZoneOffsetInMinutes,
41
43
} ) {
42
44
switch ( mode ) {
43
45
case MODE_TIME :
@@ -47,6 +49,7 @@ function getPicker({
47
49
minuteInterval,
48
50
is24Hour,
49
51
neutralButtonLabel,
52
+ timeZoneOffsetInMinutes,
50
53
} ) ;
51
54
case MODE_DATE :
52
55
default :
@@ -72,6 +75,7 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
72
75
maximumDate,
73
76
neutralButtonLabel,
74
77
minuteInterval,
78
+ timeZoneOffsetInMinutes,
75
79
} = props ;
76
80
const valueTimestamp = value . getTime ( ) ;
77
81
@@ -92,11 +96,12 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
92
96
maximumDate,
93
97
neutralButtonLabel,
94
98
minuteInterval,
99
+ timeZoneOffsetInMinutes,
95
100
} ) ;
96
101
97
102
picker . then (
98
103
function resolve ( { action, day, month, year, minute, hour} ) {
99
- const date = new Date ( valueTimestamp ) ;
104
+ let date = new Date ( valueTimestamp ) ;
100
105
const event : AndroidEvent = {
101
106
type : 'set' ,
102
107
nativeEvent : { } ,
@@ -109,7 +114,14 @@ export default function RNDateTimePicker(props: AndroidNativeProps) {
109
114
break ;
110
115
111
116
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 ;
113
125
onChange ( event , date ) ;
114
126
break ;
115
127
0 commit comments