diff --git a/DatePickerAndroid.js b/DatePickerAndroid.js
index 8d31322..3e45fc1 100644
--- a/DatePickerAndroid.js
+++ b/DatePickerAndroid.js
@@ -1,5 +1,6 @@
import React from 'react';
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native';
+import moment from 'moment'
const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } });
@@ -10,30 +11,37 @@ class DatePickerAndroid extends React.Component {
minuteInterval: 1,
};
- render = () => (
-
- )
-
- _onChange = e => this.props.onDateChange(new Date(parseInt(e.nativeEvent.date + this._getOffsetMillis())));
- _maximumDate = () => this._toUnixMillisWithTimeZoneOffset(this.props.maximumDate);
- _minimumDate = () => this._toUnixMillisWithTimeZoneOffset(this.props.minimumDate);
- _date = () => this._toUnixMillisWithTimeZoneOffset(this.props.date);
- _toUnixMillisWithTimeZoneOffset = date => date && this._toUnixMillis(date) - this._getOffsetMillis();
- _toUnixMillis = date => date.getTime()
-
- _getOffsetMillis = () => this.props.timeZoneOffsetInMinutes === undefined ? 0
- : -toMs(this.props.timeZoneOffsetInMinutes + new Date().getTimezoneOffset())
+ render = () => {
+ return (
+
+ )
+ }
-}
+ _onChange = e => {
+ const momentDateWithOffset = moment(e.nativeEvent.date).add(this._getOffsetMinutes(), 'minutes')
+ const jsDate = momentDateWithOffset.toDate()
+ this.props.onDateChange(jsDate)
+ }
-const toMs = minutes => minutes * 60 * 1000
+ _maximumDate = () => this._toIsoWithTimeZoneOffset(this.props.maximumDate);
+
+ _minimumDate = () => this._toIsoWithTimeZoneOffset(this.props.minimumDate);
+
+ _date = () => this._toIsoWithTimeZoneOffset(this.props.date);
+
+ _toIsoWithTimeZoneOffset = date => date && moment(date).add( -this._getOffsetMinutes(), 'minutes').toISOString()
+
+ _getOffsetMinutes = () => this.props.timeZoneOffsetInMinutes === undefined ? 0
+ : -(this.props.timeZoneOffsetInMinutes + new Date().getTimezoneOffset())
+
+}
const styles = StyleSheet.create({
picker: {
diff --git a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
index a28d33e..1bba47b 100644
--- a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
+++ b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
@@ -16,7 +16,7 @@ public class DatePickerManager extends SimpleViewManager {
public static final String REACT_CLASS = "DatePickerManager";
public static ThemedReactContext context;
- private double date;
+ private String date;
@Override
public String getName() {
@@ -42,7 +42,7 @@ public class DatePickerManager extends SimpleViewManager {
}
@ReactProp(name = "date")
- public void setDate(PickerView view, @Nullable double date) {
+ public void setDate(PickerView view, @Nullable String date) {
this.date = date;
}
@@ -52,13 +52,13 @@ public class DatePickerManager extends SimpleViewManager {
}
@ReactProp(name = "minimumDate")
- public void setMinimumDate(PickerView view, @Nullable double date) {
- view.setMinimumDate(Utils.unixToDate(date));
+ public void setMinimumDate(PickerView view, @Nullable String date) {
+ view.setMinimumDate(Utils.isoToDate(date));
}
@ReactProp(name = "maximumDate")
- public void setMaximumDate(PickerView view, @Nullable double date) {
- view.setMaximumDate(Utils.unixToDate(date));
+ public void setMaximumDate(PickerView view, @Nullable String date) {
+ view.setMaximumDate(Utils.isoToDate(date));
}
@ReactProp(name = "fadeToColor")
@@ -80,8 +80,8 @@ public class DatePickerManager extends SimpleViewManager {
@Override
protected void onAfterUpdateTransaction(PickerView view) {
super.onAfterUpdateTransaction(view);
- view.updateDisplayValuesIfNeeded();
- view.setDate(Utils.unixToDate(date));
+ view.updateDisplayValuesIfNeeded();
+ view.setDate(Utils.isoToDate(date));
}
public Map getExportedCustomBubblingEventTypeConstants() {
diff --git a/android/src/main/java/com/henninghall/date_picker/PickerView.java b/android/src/main/java/com/henninghall/date_picker/PickerView.java
index b004d82..5e89e22 100644
--- a/android/src/main/java/com/henninghall/date_picker/PickerView.java
+++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java
@@ -89,7 +89,7 @@ public class PickerView extends RelativeLayout {
if (minDate != null && date.before(minDate)) applyOnVisibleWheels(new AnimateToDate(minDate));
else if (maxDate != null && date.after(maxDate)) applyOnVisibleWheels(new AnimateToDate(maxDate));
else {
- event.putDouble("date", date.getTime());
+ event.putString("date", Utils.dateToIso(date));
DatePickerManager.context.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "dateChange", event);
}
} catch (ParseException e) {
diff --git a/android/src/main/java/com/henninghall/date_picker/Utils.java b/android/src/main/java/com/henninghall/date_picker/Utils.java
index 4db69d3..ed8fbc0 100644
--- a/android/src/main/java/com/henninghall/date_picker/Utils.java
+++ b/android/src/main/java/com/henninghall/date_picker/Utils.java
@@ -5,11 +5,14 @@ import android.text.format.DateUtils;
import android.util.TypedValue;
import android.view.View;
+import java.sql.Time;
import java.text.DateFormat;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
+import java.util.TimeZone;
public class Utils {
@@ -22,8 +25,17 @@ public class Utils {
return UnitPatterns.of(locale).getTodayWord();
}
- public static Date unixToDate(double date) {
- return date > 0 ? new Date((long)date) : null;
+ public static Date isoToDate(String date) {
+ try {
+ return getIsoUTCFormat().parse(date);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static String dateToIso(Date date) {
+ return getIsoUTCFormat().format(date);
}
public static int getWheelHeight(View pickerView) {
@@ -52,4 +64,11 @@ public class Utils {
return null;
}
}
+
+ private static SimpleDateFormat getIsoUTCFormat(){
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+ format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ return format;
+ }
+
}
diff --git a/package.json b/package.json
index 942611b..c60310e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-native-date-picker",
- "version": "2.1.1",
+ "version": "2.0.3",
"description": "A Cross Platform React Native Picker",
"main": "index.js",
"scripts": {
@@ -12,6 +12,9 @@
"type": "git",
"url": "git@github.com:henninghall/react-native-date-picker.git"
},
+ "dependencies": {
+ "moment": "^2.22.1"
+ },
"author": "henninghall",
"license": "MIT",
"homepage": "https://github.com/henninghall/react-native-date-picker",