From 23012f8e0d71d392767b3bece0234585f4c5991a Mon Sep 17 00:00:00 2001 From: Henrik Karlsson Date: Mon, 4 Mar 2019 18:35:52 +0100 Subject: [PATCH] Fix for timezone bug in android picker (utc-mode) --- DatePickerAndroid.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/DatePickerAndroid.js b/DatePickerAndroid.js index 3e45fc1..48615e4 100644 --- a/DatePickerAndroid.js +++ b/DatePickerAndroid.js @@ -25,8 +25,7 @@ class DatePickerAndroid extends React.Component { } _onChange = e => { - const momentDateWithOffset = moment(e.nativeEvent.date).add(this._getOffsetMinutes(), 'minutes') - const jsDate = momentDateWithOffset.toDate() + const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date).toDate() this.props.onDateChange(jsDate) } @@ -35,11 +34,25 @@ class DatePickerAndroid extends React.Component { _minimumDate = () => this._toIsoWithTimeZoneOffset(this.props.minimumDate); _date = () => this._toIsoWithTimeZoneOffset(this.props.date); + + _fromIsoWithTimeZoneOffset = date => { + if (this.props.timeZoneOffsetInMinutes === undefined) { + return moment(date) + } + + return moment.utc(date).subtract(this.props.timeZoneOffsetInMinutes, 'minutes') + } - _toIsoWithTimeZoneOffset = date => date && moment(date).add( -this._getOffsetMinutes(), 'minutes').toISOString() + _toIsoWithTimeZoneOffset = date => { + if (!date) + return undefined + + if (this.props.timeZoneOffsetInMinutes === undefined) { + return moment(date).toISOString() + } - _getOffsetMinutes = () => this.props.timeZoneOffsetInMinutes === undefined ? 0 - : -(this.props.timeZoneOffsetInMinutes + new Date().getTimezoneOffset()) + return moment.utc(date).add(this.props.timeZoneOffsetInMinutes, 'minutes') + } }