Browse Source

Changed date format from unix to iso.

master
Henning Hall 6 years ago
parent
commit
8196da4bfa
5 changed files with 64 additions and 34 deletions
  1. +30
    -22
      DatePickerAndroid.js
  2. +8
    -8
      android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
  3. +1
    -1
      android/src/main/java/com/henninghall/date_picker/PickerView.java
  4. +21
    -2
      android/src/main/java/com/henninghall/date_picker/Utils.java
  5. +4
    -1
      package.json

+ 30
- 22
DatePickerAndroid.js View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native'; import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native';
import moment from 'moment'
const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } }); const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } });
@ -10,30 +11,37 @@ class DatePickerAndroid extends React.Component {
minuteInterval: 1, minuteInterval: 1,
}; };
render = () => (
<NativeDatePicker
{...this.props}
date={this._date()}
minimumDate={this._minimumDate()}
maximumDate={this._maximumDate()}
onChange={this._onChange}
style={[styles.picker, this.props.style]}
/>
)
_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 (
<NativeDatePicker
{...this.props}
date={this._date()}
minimumDate={this._minimumDate()}
maximumDate={this._maximumDate()}
onChange={this._onChange}
style={[styles.picker, this.props.style]}
/>
)
}
}
_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({ const styles = StyleSheet.create({
picker: { picker: {

+ 8
- 8
android/src/main/java/com/henninghall/date_picker/DatePickerManager.java View File

@ -16,7 +16,7 @@ public class DatePickerManager extends SimpleViewManager {
public static final String REACT_CLASS = "DatePickerManager"; public static final String REACT_CLASS = "DatePickerManager";
public static ThemedReactContext context; public static ThemedReactContext context;
private double date;
private String date;
@Override @Override
public String getName() { public String getName() {
@ -42,7 +42,7 @@ public class DatePickerManager extends SimpleViewManager {
} }
@ReactProp(name = "date") @ReactProp(name = "date")
public void setDate(PickerView view, @Nullable double date) {
public void setDate(PickerView view, @Nullable String date) {
this.date = date; this.date = date;
} }
@ -52,13 +52,13 @@ public class DatePickerManager extends SimpleViewManager {
} }
@ReactProp(name = "minimumDate") @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") @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") @ReactProp(name = "fadeToColor")
@ -80,8 +80,8 @@ public class DatePickerManager extends SimpleViewManager {
@Override @Override
protected void onAfterUpdateTransaction(PickerView view) { protected void onAfterUpdateTransaction(PickerView view) {
super.onAfterUpdateTransaction(view); super.onAfterUpdateTransaction(view);
view.updateDisplayValuesIfNeeded();
view.setDate(Utils.unixToDate(date));
view.updateDisplayValuesIfNeeded();
view.setDate(Utils.isoToDate(date));
} }
public Map getExportedCustomBubblingEventTypeConstants() { public Map getExportedCustomBubblingEventTypeConstants() {

+ 1
- 1
android/src/main/java/com/henninghall/date_picker/PickerView.java View File

@ -89,7 +89,7 @@ public class PickerView extends RelativeLayout {
if (minDate != null && date.before(minDate)) applyOnVisibleWheels(new AnimateToDate(minDate)); if (minDate != null && date.before(minDate)) applyOnVisibleWheels(new AnimateToDate(minDate));
else if (maxDate != null && date.after(maxDate)) applyOnVisibleWheels(new AnimateToDate(maxDate)); else if (maxDate != null && date.after(maxDate)) applyOnVisibleWheels(new AnimateToDate(maxDate));
else { else {
event.putDouble("date", date.getTime());
event.putString("date", Utils.dateToIso(date));
DatePickerManager.context.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "dateChange", event); DatePickerManager.context.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "dateChange", event);
} }
} catch (ParseException e) { } catch (ParseException e) {

+ 21
- 2
android/src/main/java/com/henninghall/date_picker/Utils.java View File

@ -5,11 +5,14 @@ import android.text.format.DateUtils;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.View; import android.view.View;
import java.sql.Time;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.TimeZone;
public class Utils { public class Utils {
@ -22,8 +25,17 @@ public class Utils {
return UnitPatterns.of(locale).getTodayWord(); 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) { public static int getWheelHeight(View pickerView) {
@ -52,4 +64,11 @@ public class Utils {
return null; 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;
}
} }

+ 4
- 1
package.json View File

@ -1,6 +1,6 @@
{ {
"name": "react-native-date-picker", "name": "react-native-date-picker",
"version": "2.1.1",
"version": "2.0.3",
"description": "A Cross Platform React Native Picker", "description": "A Cross Platform React Native Picker",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@ -12,6 +12,9 @@
"type": "git", "type": "git",
"url": "git@github.com:henninghall/react-native-date-picker.git" "url": "git@github.com:henninghall/react-native-date-picker.git"
}, },
"dependencies": {
"moment": "^2.22.1"
},
"author": "henninghall", "author": "henninghall",
"license": "MIT", "license": "MIT",
"homepage": "https://github.com/henninghall/react-native-date-picker", "homepage": "https://github.com/henninghall/react-native-date-picker",

Loading…
Cancel
Save