diff --git a/DatePickerAndroid.js b/DatePickerAndroid.js index 6436de4..e8c3d93 100644 --- a/DatePickerAndroid.js +++ b/DatePickerAndroid.js @@ -10,7 +10,6 @@ const NativeDatePicker = requireNativeComponent( ) class DatePickerAndroid extends React.PureComponent { - render() { if (__DEV__) throwIfInvalidProps(this.props) return ( @@ -29,6 +28,9 @@ class DatePickerAndroid extends React.PureComponent { _onChange = e => { const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date).toDate() this.props.onDateChange && this.props.onDateChange(jsDate) + if (this.props.onDateStringChange) { + this.props.onDateStringChange(e.nativeEvent.dateString) + } } _maximumDate = () => diff --git a/android/src/main/java/com/henninghall/date_picker/DayFormats.java b/android/src/main/java/com/henninghall/date_picker/DayFormats.java new file mode 100644 index 0000000..7acf4e3 --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/DayFormats.java @@ -0,0 +1,743 @@ +package com.henninghall.date_picker; + +import java.util.HashMap; + +public class DayFormats { + + public static String get(String locale){ + return map.get(locale); + } + + private static HashMap map = new HashMap(){{ + put("af","EEE dd MMM"); + put("af_NA","EEE dd MMM"); + put("af_ZA","EEE dd MMM"); + put("agq","EEE d MMM"); + put("agq_CM","EEE d MMM"); + put("ak","EEE MMM dd"); + put("ak_GH","EEE MMM dd"); + put("am","MMM d EEE"); + put("am_ET","MMM d EEE"); + put("ar","EEE، d MMM"); + put("ar_001","EEE، d MMM"); + put("ar_AE","EEE، d MMM"); + put("ar_BH","EEE، d MMM"); + put("ar_DJ","EEE، d MMM"); + put("ar_DZ","EEE، d MMM"); + put("ar_EG","EEE، d MMM"); + put("ar_EH","EEE، d MMM"); + put("ar_ER","EEE، d MMM"); + put("ar_IL","EEE، d MMM"); + put("ar_IQ","EEE، d MMM"); + put("ar_JO","EEE، d MMM"); + put("ar_KM","EEE، d MMM"); + put("ar_KW","EEE، d MMM"); + put("ar_LB","EEE، d MMM"); + put("ar_LY","EEE، d MMM"); + put("ar_MA","EEE، d MMM"); + put("ar_MR","EEE، d MMM"); + put("ar_OM","EEE، d MMM"); + put("ar_PS","EEE، d MMM"); + put("ar_QA","EEE، d MMM"); + put("ar_SA","EEE، d MMM"); + put("ar_SD","EEE، d MMM"); + put("ar_SO","EEE، d MMM"); + put("ar_SS","EEE، d MMM"); + put("ar_SY","EEE، d MMM"); + put("ar_TD","EEE، d MMM"); + put("ar_TN","EEE، d MMM"); + put("ar_XB","EEE، d MMM"); + put("ar_YE","EEE، d MMM"); + put("as","EEE d MMM"); + put("as_IN","EEE d MMM"); + put("asa","EEE d MMM"); + put("asa_TZ","EEE d MMM"); + put("ast","EEE d MMM"); + put("ast_ES","EEE d MMM"); + put("az","d MMM EEE"); + put("az_Cyrl","d MMM EEE"); + put("az_Cyrl_AZ","d MMM EEE"); + put("az_Latn","d MMM EEE"); + put("az_Latn_AZ","d MMM EEE"); + put("bas","EEE d MMM"); + put("bas_CM","EEE d MMM"); + put("be","EEE d MMM"); + put("be_BY","EEE d MMM"); + put("bem","EEE d MMM"); + put("bem_ZM","EEE d MMM"); + put("bez","EEE d MMM"); + put("bez_TZ","EEE d MMM"); + put("bg","EEE d MMM"); + put("bg_BG","EEE d MMM"); + put("bm","EEE d MMM"); + put("bm_ML","EEE d MMM"); + put("bn","EEE d MMM"); + put("bn_BD","EEE d MMM"); + put("bn_IN","EEE d MMM"); + put("bo","MMMའི་ཚེས་d EEE"); + put("bo_CN","MMMའི་ཚེས་d EEE"); + put("bo_IN","MMMའི་ཚེས་d EEE"); + put("br","EEE d MMM"); + put("br_FR","EEE d MMM"); + put("brx","EEE MMM d"); + put("brx_IN","EEE MMM d"); + put("bs","EEE d. MMM "); + put("bs_Cyrl","EEE dd. MMM "); + put("bs_Cyrl_BA","EEE dd. MMM "); + put("bs_Latn","EEE d. MMM "); + put("bs_Latn_BA","EEE d. MMM "); + put("ca","EEE d MMM"); + put("ca_AD","EEE d MMM"); + put("ca_ES","EEE d MMM"); + put("ca_FR","EEE d MMM"); + put("ca_IT","EEE d MMM"); + put("ccp","EEE d MMM"); + put("ccp_BD","EEE d MMM"); + put("ccp_IN","EEE d MMM"); + put("ce","MMM d EEE"); + put("ce_RU","MMM d EEE"); + put("cgg","EEE d MMM"); + put("cgg_UG","EEE d MMM"); + put("chr","EEE MMM d"); + put("chr_US","EEE MMM d"); + put("ckb","MMM d EEE"); + put("ckb_IQ","MMM d EEE"); + put("ckb_IR","MMM d EEE"); + put("cs","EEE d. MMM"); + put("cs_CZ","EEE d. MMM"); + put("cy","EEE d MMM"); + put("cy_GB","EEE d MMM"); + put("da","EEE 'den' d. MMM"); + put("da_DK","EEE 'den' d. MMM"); + put("da_GL","EEE 'den' d. MMM"); + put("dav","EEE d MMM"); + put("dav_KE","EEE d MMM"); + put("de","EEE d. MMM"); + put("de_AT","EEE d. MMM"); + put("de_BE","EEE d. MMM"); + put("de_CH","EEE d. MMM"); + put("de_DE","EEE d. MMM"); + put("de_IT","EEE d. MMM"); + put("de_LI","EEE d. MMM"); + put("de_LU","EEE d. MMM"); + put("dje","EEE d MMM"); + put("dje_NE","EEE d MMM"); + put("dsb","EEE d. MMM"); + put("dsb_DE","EEE d. MMM"); + put("dua","EEE d MMM"); + put("dua_CM","EEE d MMM"); + put("dyo","EEE d MMM"); + put("dyo_SN","EEE d MMM"); + put("dz","EEE MMM ཚེས་dd"); + put("dz_BT","EEE MMM ཚེས་dd"); + put("ebu","EEE d MMM"); + put("ebu_KE","EEE d MMM"); + put("ee","EEE MMM d"); + put("ee_GH","EEE MMM d"); + put("ee_TG","EEE MMM d"); + put("el","EEE d MMM"); + put("el_CY","EEE d MMM"); + put("el_GR","EEE d MMM"); + put("en","EEE MMM d"); + put("en_001","EEE d MMM"); + put("en_150","EEE d MMM"); + put("en_AG","EEE d MMM"); + put("en_AI","EEE d MMM"); + put("en_AS","EEE MMM d"); + put("en_AT","EEE d MMM"); + put("en_AU","EEE d MMM"); + put("en_BB","EEE d MMM"); + put("en_BE","EEE d MMM"); + put("en_BI","EEE MMM d"); + put("en_BM","EEE d MMM"); + put("en_BS","EEE d MMM"); + put("en_BW","EEE dd MMM"); + put("en_BZ","EEE dd MMM"); + put("en_CA","EEE MMM d"); + put("en_CC","EEE d MMM"); + put("en_CH","EEE d MMM"); + put("en_CK","EEE d MMM"); + put("en_CM","EEE d MMM"); + put("en_CX","EEE d MMM"); + put("en_CY","EEE d MMM"); + put("en_DE","EEE d MMM"); + put("en_DG","EEE d MMM"); + put("en_DK","EEE d MMM"); + put("en_DM","EEE d MMM"); + put("en_ER","EEE d MMM"); + put("en_FI","EEE d MMM"); + put("en_FJ","EEE d MMM"); + put("en_FK","EEE d MMM"); + put("en_FM","EEE d MMM"); + put("en_GB","EEE d MMM"); + put("en_GD","EEE d MMM"); + put("en_GG","EEE d MMM"); + put("en_GH","EEE d MMM"); + put("en_GI","EEE d MMM"); + put("en_GM","EEE d MMM"); + put("en_GU","EEE MMM d"); + put("en_GY","EEE d MMM"); + put("en_HK","EEE d MMM"); + put("en_IE","EEE d MMM"); + put("en_IL","EEE d MMM"); + put("en_IM","EEE d MMM"); + put("en_IN","EEE d MMM"); + put("en_IO","EEE d MMM"); + put("en_JE","EEE d MMM"); + put("en_JM","EEE d MMM"); + put("en_KE","EEE d MMM"); + put("en_KI","EEE d MMM"); + put("en_KN","EEE d MMM"); + put("en_KY","EEE d MMM"); + put("en_LC","EEE d MMM"); + put("en_LR","EEE d MMM"); + put("en_LS","EEE d MMM"); + put("en_MG","EEE d MMM"); + put("en_MH","EEE MMM d"); + put("en_MO","EEE d MMM"); + put("en_MP","EEE MMM d"); + put("en_MS","EEE d MMM"); + put("en_MT","EEE d MMM"); + put("en_MU","EEE d MMM"); + put("en_MW","EEE d MMM"); + put("en_MY","EEE d MMM"); + put("en_NA","EEE d MMM"); + put("en_NF","EEE d MMM"); + put("en_NG","EEE d MMM"); + put("en_NL","EEE d MMM"); + put("en_NR","EEE d MMM"); + put("en_NU","EEE d MMM"); + put("en_NZ","EEE d MMM"); + put("en_PG","EEE d MMM"); + put("en_PH","EEE d MMM"); + put("en_PK","EEE d MMM"); + put("en_PN","EEE d MMM"); + put("en_PR","EEE MMM d"); + put("en_PW","EEE d MMM"); + put("en_RW","EEE d MMM"); + put("en_SB","EEE d MMM"); + put("en_SC","EEE d MMM"); + put("en_SD","EEE d MMM"); + put("en_SE","EEE d MMM"); + put("en_SG","EEE d MMM"); + put("en_SH","EEE d MMM"); + put("en_SI","EEE d MMM"); + put("en_SL","EEE d MMM"); + put("en_SS","EEE d MMM"); + put("en_SX","EEE d MMM"); + put("en_SZ","EEE d MMM"); + put("en_TC","EEE d MMM"); + put("en_TK","EEE d MMM"); + put("en_TO","EEE d MMM"); + put("en_TT","EEE d MMM"); + put("en_TV","EEE d MMM"); + put("en_TZ","EEE d MMM"); + put("en_UG","EEE d MMM"); + put("en_UM","EEE MMM d"); + put("en_US","EEE MMM d"); + put("en_US_POSIX","EEE MMM d"); + put("en_VC","EEE d MMM"); + put("en_VG","EEE d MMM"); + put("en_VI","EEE MMM d"); + put("en_VU","EEE d MMM"); + put("en_WS","EEE d MMM"); + put("en_XA","[EEE MMM d]"); + put("en_ZA","EEE dd MMM"); + put("en_ZM","EEE d MMM"); + put("en_ZW","EEE dd MMM"); + put("eo","EEE d_'a' 'de' MMM"); + put("es","EEE d 'de' MMM"); + put("es_419","EEE d 'de' MMM"); + put("es_AR","EEE d 'de' MMM"); + put("es_BO","EEE d 'de' MMM"); + put("es_BR","EEE d 'de' MMM"); + put("es_BZ","EEE d 'de' MMM"); + put("es_CL","EEE d 'de' MMM"); + put("es_CO","EEE d 'de' MMM"); + put("es_CR","EEE d 'de' MMM"); + put("es_CU","EEE d 'de' MMM"); + put("es_DO","EEE d 'de' MMM"); + put("es_EA","EEE d 'de' MMM"); + put("es_EC","EEE d 'de' MMM"); + put("es_ES","EEE d 'de' MMM"); + put("es_GQ","EEE d 'de' MMM"); + put("es_GT","EEE d 'de' MMM"); + put("es_HN","EEE dd 'de' MMM"); + put("es_IC","EEE d 'de' MMM"); + put("es_MX","EEE d 'de' MMM"); + put("es_NI","EEE d 'de' MMM"); + put("es_PA","EEE d 'de' MMM"); + put("es_PE","EEE d 'de' MMM"); + put("es_PH","EEE d 'de' MMM"); + put("es_PR","EEE d 'de' MMM"); + put("es_PY","EEE d 'de' MMM"); + put("es_SV","EEE d 'de' MMM"); + put("es_US","EEE d 'de' MMM"); + put("es_UY","EEE d 'de' MMM"); + put("es_VE","EEE d 'de' MMM"); + put("et","EEE d. MMM"); + put("et_EE","EEE d. MMM"); + put("eu","MMM d EEE"); + put("eu_ES","MMM d EEE"); + put("ewo","EEE d MMM"); + put("ewo_CM","EEE d MMM"); + put("fa","EEE d MMM"); + put("fa_AF","EEE d MMM"); + put("fa_IR","EEE d MMM"); + put("ff","EEE d MMM"); + put("fi","cccc d. MMM"); + put("fi_FI","cccc d. MMM"); + put("fil","EEE MMM d"); + put("fil_PH","EEE MMM d"); + put("fo","EEE d. MMM"); + put("fo_DK","EEE d. MMM"); + put("fo_FO","EEE d. MMM"); + put("fr","EEE d MMM"); + put("fr_BE","EEE d MMM"); + put("fr_BF","EEE d MMM"); + put("fr_BI","EEE d MMM"); + put("fr_BJ","EEE d MMM"); + put("fr_BL","EEE d MMM"); + put("fr_CA","EEE d MMM"); + put("fr_CD","EEE d MMM"); + put("fr_CF","EEE d MMM"); + put("fr_CG","EEE d MMM"); + put("fr_CH","EEE d MMM"); + put("fr_CI","EEE d MMM"); + put("fr_CM","EEE d MMM"); + put("fr_DJ","EEE d MMM"); + put("fr_DZ","EEE d MMM"); + put("fr_FR","EEE d MMM"); + put("fr_GA","EEE d MMM"); + put("fr_GF","EEE d MMM"); + put("fr_GN","EEE d MMM"); + put("fr_GP","EEE d MMM"); + put("fr_GQ","EEE d MMM"); + put("fr_HT","EEE d MMM"); + put("fr_KM","EEE d MMM"); + put("fr_LU","EEE d MMM"); + put("fr_MA","EEE d MMM"); + put("fr_MC","EEE d MMM"); + put("fr_MF","EEE d MMM"); + put("fr_MG","EEE d MMM"); + put("fr_ML","EEE d MMM"); + put("fr_MQ","EEE d MMM"); + put("fr_MR","EEE d MMM"); + put("fr_MU","EEE d MMM"); + put("fr_NC","EEE d MMM"); + put("fr_NE","EEE d MMM"); + put("fr_PF","EEE d MMM"); + put("fr_PM","EEE d MMM"); + put("fr_RE","EEE d MMM"); + put("fr_RW","EEE d MMM"); + put("fr_SC","EEE d MMM"); + put("fr_SN","EEE d MMM"); + put("fr_SY","EEE d MMM"); + put("fr_TD","EEE d MMM"); + put("fr_TG","EEE d MMM"); + put("fr_TN","EEE d MMM"); + put("fr_VU","EEE d MMM"); + put("fr_WF","EEE d MMM"); + put("fr_YT","EEE d MMM"); + put("fur","EEE d 'di' MMM"); + put("fur_IT","EEE d 'di' MMM"); + put("fy","EEE d MMM"); + put("fy_NL","EEE d MMM"); + put("ga","EEE d MMM"); + put("ga_IE","EEE d MMM"); + put("gd","EEE d'mh' MMM"); + put("gd_GB","EEE d'mh' MMM"); + put("gl","EEE d 'de' MMM"); + put("gl_ES","EEE d 'de' MMM"); + put("gsw","EEE d. MMM"); + put("gsw_CH","EEE d. MMM"); + put("gsw_FR","EEE d. MMM"); + put("gsw_LI","EEE d. MMM"); + put("gu","EEE d MMM"); + put("gu_IN","EEE d MMM"); + put("guz","EEE d MMM"); + put("guz_KE","EEE d MMM"); + put("gv","MMM d EEE"); + put("gv_IM","MMM d EEE"); + put("ha","EEE d MMM"); + put("ha_GH","EEE d MMM"); + put("ha_NE","EEE d MMM"); + put("ha_NG","EEE d MMM"); + put("haw","EEE d MMM"); + put("haw_US","EEE d MMM"); + put("he","EEE d בMMM"); + put("he_IL","EEE d בMMM"); + put("hi","EEE d MMM"); + put("hi_IN","EEE d MMM"); + put("hr","EEE d. MMM "); + put("hr_BA","EEE d. MMM "); + put("hr_HR","EEE d. MMM "); + put("hsb","EEE d. MMM"); + put("hsb_DE","EEE d. MMM"); + put("hu","MMM d. EEE"); + put("hu_HU","MMM d. EEE"); + put("hy","MMM d EEE"); + put("hy_AM","MMM d EEE"); + put("ia","EEE 'le' d 'de' MMM"); + put("ia_001","EEE 'le' d 'de' MMM"); + put("id","EEE dd MMM"); + put("id_ID","EEE dd MMM"); + put("ig","EEE d MMM"); + put("ig_NG","EEE d MMM"); + put("ii","MMM d EEE"); + put("ii_CN","MMM d EEE"); + put("is","EEE d. MMM"); + put("is_IS","EEE d. MMM"); + put("it","EEE d MMM"); + put("it_CH","EEE d MMM"); + put("it_IT","EEE d MMM"); + put("it_SM","EEE d MMM"); + put("it_VA","EEE d MMM"); + put("ja","M月d日EEE"); + put("ja_JP","M月d日EEE"); + put("jgo","EEE MMM dd"); + put("jgo_CM","EEE MMM dd"); + put("jmc","EEE d MMM"); + put("jmc_TZ","EEE d MMM"); + put("jv","EEE d MMM"); + put("jv_ID","EEE d MMM"); + put("ka","EEE dd MMM"); + put("ka_GE","EEE dd MMM"); + put("kab","EEE d MMM"); + put("kab_DZ","EEE d MMM"); + put("kam","EEE d MMM"); + put("kam_KE","EEE d MMM"); + put("kde","EEE d MMM"); + put("kde_TZ","EEE d MMM"); + put("kea","EEE d 'di' MMM"); + put("kea_CV","EEE d 'di' MMM"); + put("khq","EEE d MMM"); + put("khq_ML","EEE d MMM"); + put("ki","EEE d MMM"); + put("ki_KE","EEE d MMM"); + put("kk","d MMM EEE"); + put("kk_KZ","d MMM EEE"); + put("kkj","EEE dd MMM"); + put("kkj_CM","EEE dd MMM"); + put("kl","MMM d EEE"); + put("kl_GL","MMM d EEE"); + put("kln","EEE d MMM"); + put("kln_KE","EEE d MMM"); + put("km","EEE d MMM"); + put("km_KH","EEE d MMM"); + put("kn","EEE MMM d"); + put("kn_IN","EEE MMM d"); + put("ko","M월 d일 EEE"); + put("ko_KP","M월 d일 EEE"); + put("ko_KR","M월 d일 EEE"); + put("kok","EEE d MMM"); + put("kok_IN","EEE d MMM"); + put("ks","EEE MMM d"); + put("ks_IN","EEE MMM d"); + put("ksb","EEE d MMM"); + put("ksb_TZ","EEE d MMM"); + put("ksf","EEE d MMM"); + put("ksf_CM","EEE d MMM"); + put("ksh","EEE 'dä' d. MMM"); + put("ksh_DE","EEE 'dä' d. MMM"); + put("ku","MMM d EEE"); + put("ku_TR","MMM d EEE"); + put("kw","MMM d EEE"); + put("kw_GB","MMM d EEE"); + put("ky","d_MMM EEE"); + put("ky_KG","d_MMM EEE"); + put("lag","EEE d MMM"); + put("lag_TZ","EEE d MMM"); + put("lb","EEE d. MMM"); + put("lb_LU","EEE d. MMM"); + put("lg","EEE d MMM"); + put("lg_UG","EEE d MMM"); + put("lkt","MMM d EEE"); + put("lkt_US","MMM d EEE"); + put("ln","EEE d MMM"); + put("ln_AO","EEE d MMM"); + put("ln_CD","EEE d MMM"); + put("ln_CF","EEE d MMM"); + put("ln_CG","EEE d MMM"); + put("lo","EEE ທີ d MMM"); + put("lo_LA","EEE ທີ d MMM"); + put("lrc","MMM d EEE"); + put("lrc_IQ","MMM d EEE"); + put("lrc_IR","MMM d EEE"); + put("lt","MMM d 'd'. EEE"); + put("lt_LT","MMM d 'd'. EEE"); + put("lu","EEE d MMM"); + put("lu_CD","EEE d MMM"); + put("luo","EEE d MMM"); + put("luo_KE","EEE d MMM"); + put("luy","EEE d MMM"); + put("luy_KE","EEE d MMM"); + put("lv","EEE 'gada' d. MMM"); + put("lv_LV","EEE 'gada' d. MMM"); + put("mas","EEE d MMM"); + put("mas_KE","EEE d MMM"); + put("mas_TZ","EEE d MMM"); + put("mer","EEE d MMM"); + put("mer_KE","EEE d MMM"); + put("mfe","EEE d MMM"); + put("mfe_MU","EEE d MMM"); + put("mg","EEE d MMM"); + put("mg_MG","EEE d MMM"); + put("mgh","EEE d MMM"); + put("mgh_MZ","EEE d MMM"); + put("mgo","EEE MMM dd"); + put("mgo_CM","EEE MMM dd"); + put("mi","MMM d EEE"); + put("mi_NZ","MMM d EEE"); + put("mk","EEE dd MMM"); + put("mk_MK","EEE dd MMM"); + put("ml","MMM d EEE"); + put("ml_IN","MMM d EEE"); + put("mn","MM.dd EEE"); + put("mn_MN","MM.dd EEE"); + put("mr","EEE d MMM"); + put("mr_IN","EEE d MMM"); + put("ms","EEE d MMM"); + put("ms_BN","dd MMM"); + put("ms_MY","EEE d MMM"); + put("ms_SG","EEE d MMM"); + put("mt","EEE d 'ta'’ MMM"); + put("mt_MT","EEE d 'ta'’ MMM"); + put("mua","EEE d MMM"); + put("mua_CM","EEE d MMM"); + put("my","၊ MMM d၊ EEE"); + put("my_MM","၊ MMM d၊ EEE"); + put("mzn","MMM d EEE"); + put("mzn_IR","MMM d EEE"); + put("naq","EEE d MMM"); + put("naq_NA","EEE d MMM"); + put("nb","EEE d. MMM"); + put("nb_NO","EEE d. MMM"); + put("nb_SJ","EEE d. MMM"); + put("nd","EEE d MMM"); + put("nd_ZW","EEE d MMM"); + put("nds","MMM d EEE"); + put("nds_DE","MMM d EEE"); + put("nds_NL","MMM d EEE"); + put("ne","MMM d EEE"); + put("ne_IN","MMM d EEE"); + put("ne_NP","MMM d EEE"); + put("nl","EEE d MMM"); + put("nl_AW","EEE d MMM"); + put("nl_BE","EEE d MMM"); + put("nl_BQ","EEE d MMM"); + put("nl_CW","EEE d MMM"); + put("nl_NL","EEE d MMM"); + put("nl_SR","EEE d MMM"); + put("nl_SX","EEE d MMM"); + put("nmg","EEE d MMM"); + put("nmg_CM","EEE d MMM"); + put("nn","EEE d. MMM"); + put("nn_NO","EEE d. MMM"); + put("nnh","EEE 'lyɛ'̌ʼ d 'na' MMM"); + put("nnh_CM","EEE 'lyɛ'̌ʼ d 'na' MMM"); + put("nus","EEE d MMM"); + put("nus_SS","EEE d MMM"); + put("nyn","EEE d MMM"); + put("nyn_UG","EEE d MMM"); + put("om","EEE MMM d"); + put("om_ET","EEE MMM d"); + put("om_KE","EEE MMM d"); + put("or","EEE MMM d"); + put("or_IN","EEE MMM d"); + put("os","EEE d MMM"); + put("os_GE","EEE d MMM"); + put("os_RU","EEE d MMM"); + put("pa","EEE d MMM"); + put("pa_Arab","EEE dd MMM"); + put("pa_Arab_PK","EEE dd MMM"); + put("pa_Guru","EEE d MMM"); + put("pa_Guru_IN","EEE d MMM"); + put("pl","EEE d MMM"); + put("pl_PL","EEE d MMM"); + put("ps","EEE MMM d"); + put("ps_AF","EEE MMM d"); + put("pt","EEE d 'de' MMM"); + put("pt_AO","EEE d 'de' MMM"); + put("pt_BR","EEE d 'de' MMM"); + put("pt_CH","EEE d 'de' MMM"); + put("pt_CV","EEE d 'de' MMM"); + put("pt_GQ","EEE d 'de' MMM"); + put("pt_GW","EEE d 'de' MMM"); + put("pt_LU","EEE d 'de' MMM"); + put("pt_MO","EEE d 'de' MMM"); + put("pt_MZ","EEE d 'de' MMM"); + put("pt_PT","EEE d 'de' MMM"); + put("pt_ST","EEE d 'de' MMM"); + put("pt_TL","EEE d 'de' MMM"); + put("qu","EEE d MMM"); + put("qu_BO","EEE d MMM"); + put("qu_EC","EEE d MMM"); + put("qu_PE","EEE d MMM"); + put("rm","EEE d MMM"); + put("rm_CH","EEE d MMM"); + put("rn","EEE d MMM"); + put("rn_BI","EEE d MMM"); + put("ro","EEE d MMM"); + put("ro_MD","EEE d MMM"); + put("ro_RO","EEE d MMM"); + put("rof","EEE d MMM"); + put("rof_TZ","EEE d MMM"); + put("ru","EEE d MMM"); + put("ru_BY","EEE d MMM"); + put("ru_KG","EEE d MMM"); + put("ru_KZ","EEE d MMM"); + put("ru_MD","EEE d MMM"); + put("ru_RU","EEE d MMM"); + put("ru_UA","EEE d MMM"); + put("rw","MMM d EEE"); + put("rw_RW","MMM d EEE"); + put("rwk","EEE d MMM"); + put("rwk_TZ","EEE d MMM"); + put("sah","MMM d EEE"); + put("sah_RU","MMM d EEE"); + put("saq","EEE d MMM"); + put("saq_KE","EEE d MMM"); + put("sbp","EEE d MMM"); + put("sbp_TZ","EEE d MMM"); + put("sd","MMM d EEE"); + put("sd_PK","MMM d EEE"); + put("se","MMM d EEE"); + put("se_FI","EEE d MMM"); + put("se_NO","MMM d EEE"); + put("se_SE","MMM d EEE"); + put("seh","EEE d 'de' MMM"); + put("seh_MZ","EEE d 'de' MMM"); + put("ses","EEE d MMM"); + put("ses_ML","EEE d MMM"); + put("sg","EEE d MMM"); + put("sg_CF","EEE d MMM"); + put("shi","EEE d MMM"); + put("shi_Latn","EEE d MMM"); + put("shi_Latn_MA","EEE d MMM"); + put("shi_Tfng","EEE d MMM"); + put("shi_Tfng_MA","EEE d MMM"); + put("si","MMM d EEE"); + put("si_LK","MMM d EEE"); + put("sk","EEE d. MMM"); + put("sk_SK","EEE d. MMM"); + put("sl","EEE dd. MMM"); + put("sl_SI","EEE dd. MMM"); + put("smn","cccc MMM d."); + put("smn_FI","cccc MMM d."); + put("sn","MMM d EEE"); + put("sn_ZW","MMM d EEE"); + put("so","EEE MMM dd"); + put("so_DJ","EEE MMM dd"); + put("so_ET","EEE MMM dd"); + put("so_KE","EEE MMM dd"); + put("so_SO","EEE MMM dd"); + put("sq","EEE d MMM"); + put("sq_AL","EEE d MMM"); + put("sq_MK","EEE d MMM"); + put("sq_XK","EEE d MMM"); + put("sr","EEE dd. MMM "); + put("sr_Cyrl","EEE dd. MMM "); + put("sr_Cyrl_BA","EEE dd. MMM "); + put("sr_Cyrl_ME","EEE dd. MMM "); + put("sr_Cyrl_RS","EEE dd. MMM "); + put("sr_Cyrl_XK","EEE dd. MMM "); + put("sr_Latn","EEE dd. MMM "); + put("sr_Latn_BA","EEE dd. MMM "); + put("sr_Latn_ME","EEE dd. MMM "); + put("sr_Latn_RS","EEE dd. MMM "); + put("sr_Latn_XK","EEE dd. MMM "); + put("sv","EEE d MMM"); + put("sv_AX","EEE d MMM"); + put("sv_FI","EEE d MMM"); + put("sv_SE","EEE d MMM"); + put("sw","EEE d MMM"); + put("sw_CD","EEE d MMM"); + put("sw_KE","EEE d MMM"); + put("sw_TZ","EEE d MMM"); + put("sw_UG","EEE d MMM"); + put("ta","EEE d MMM"); + put("ta_IN","EEE d MMM"); + put("ta_LK","EEE d MMM"); + put("ta_MY","EEE d MMM"); + put("ta_SG","EEE d MMM"); + put("te","d MMM EEE"); + put("te_IN","d MMM EEE"); + put("teo","EEE d MMM"); + put("teo_KE","EEE d MMM"); + put("teo_UG","EEE d MMM"); + put("tg","EEE dd MMM"); + put("tg_TJ","EEE dd MMM"); + put("th","EEEที่ d MMM"); + put("th_TH","EEEที่ d MMM"); + put("ti","EEE፣ dd MMM"); + put("ti_ER","EEE፣ dd MMM"); + put("ti_ET","EEE፣ dd MMM"); + put("tk","d MMM EEE"); + put("tk_TM","d MMM EEE"); + put("to","EEE d MMM"); + put("to_TO","EEE d MMM"); + put("tr","d MMM EEE"); + put("tr_CY","d MMM EEE"); + put("tr_TR","d MMM EEE"); + put("tt","d MMM EEE"); + put("tt_RU","d MMM EEE"); + put("twq","EEE d MMM"); + put("twq_NE","EEE d MMM"); + put("tzm","EEE d MMM"); + put("tzm_MA","EEE d MMM"); + put("ug","d_MMM، EEE"); + put("ug_CN","d_MMM، EEE"); + put("uk","EEE d MMM "); + put("uk_UA","EEE d MMM "); + put("ur","EEE، d MMM،"); + put("ur_IN","EEE، d MMM،"); + put("ur_PK","EEE، d MMM،"); + put("uz","EEE d_MMM"); + put("uz_Arab","EEE d_MMM"); + put("uz_Arab_AF","EEE d_MMM"); + put("uz_Cyrl","EEE dd MMM"); + put("uz_Cyrl_UZ","EEE dd MMM"); + put("uz_Latn","EEE d_MMM"); + put("uz_Latn_UZ","EEE d_MMM"); + put("vai","EEE d MMM"); + put("vai_Latn","EEE d MMM"); + put("vai_Latn_LR","EEE d MMM"); + put("vai_Vaii","EEE d MMM"); + put("vai_Vaii_LR","EEE d MMM"); + put("vi","EEE d MMM"); + put("vi_VN","EEE d MMM"); + put("vun","EEE d MMM"); + put("vun_TZ","EEE d MMM"); + put("wae","EEE d. MMM"); + put("wae_CH","EEE d. MMM"); + put("wo","EEE d MMM"); + put("wo_SN","EEE d MMM"); + put("xh","MMM d EEE"); + put("xh_ZA","MMM d EEE"); + put("xog","EEE d MMM"); + put("xog_UG","EEE d MMM"); + put("yav","EEE d MMM"); + put("yav_CM","EEE d MMM"); + put("yi","EEE dטן MMM"); + put("yi_001","EEE dטן MMM"); + put("yo","EEE d MMM"); + put("yo_BJ","EEE d MMM"); + put("yo_NG","EEE d MMM"); + put("yue","M月d日 EEE"); + put("yue_Hans","M月d日EEE"); + put("yue_Hans_CN","M月d日EEE"); + put("yue_Hant","M月d日 EEE"); + put("yue_Hant_HK","M月d日 EEE"); + put("zgh","EEE d MMM"); + put("zgh_MA","EEE d MMM"); + put("zh","M月d日EEE"); + put("zh_CH","M月d日EEE"); + put("zh_HK","M月d日EEE"); + put("zh_MO","M月d日EEE"); + put("zh_SG","M月d日EEE"); + put("zu","EEE MMM d"); + put("zu_ZA","EEE MMM d"); + }}; + +} diff --git a/android/src/main/java/com/henninghall/date_picker/LocaleUtils.java b/android/src/main/java/com/henninghall/date_picker/LocaleUtils.java index f168030..9eec73f 100644 --- a/android/src/main/java/com/henninghall/date_picker/LocaleUtils.java +++ b/android/src/main/java/com/henninghall/date_picker/LocaleUtils.java @@ -1,8 +1,12 @@ package com.henninghall.date_picker; +import android.os.Build; +import android.util.Log; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.Locale; public class LocaleUtils { @@ -24,16 +28,6 @@ public class LocaleUtils { return null; } - public static int getFullPatternPos(String format, Locale locale) { - ArrayList pieces = getFullPatternPieces(locale); - for (String piece: pieces){ - if(piece.contains(format)) { - return pieces.indexOf(piece); - } - } - return -1; - } - public static String getDatePattern(Locale locale){ DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale); return ((SimpleDateFormat)df).toLocalizedPattern().replace(",", ""); diff --git a/android/src/main/java/com/henninghall/date_picker/State.java b/android/src/main/java/com/henninghall/date_picker/State.java index 5aab547..f540525 100644 --- a/android/src/main/java/com/henninghall/date_picker/State.java +++ b/android/src/main/java/com/henninghall/date_picker/State.java @@ -21,16 +21,16 @@ import java.util.TimeZone; public class State { - private final Prop dateProp = new DateProp(); + private final DateProp dateProp = new DateProp(); private final Prop modeProp = new ModeProp(); - private final Prop localeProp = new LocaleProp(); - private final Prop fadeToColorProp = new FadeToColorProp(); - private final Prop textColorProp = new TextColorProp(); - private final Prop minuteIntervalProp = new MinuteIntervalProp(); - private final Prop minimumDateProp = new MinimumDateProp(); - private final Prop maximumDateProp = new MaximumDateProp(); - private final Prop utcProp = new UtcProp(); - private final Prop heightProp = new HeightProp(); + private final LocaleProp localeProp = new LocaleProp(); + private final FadeToColorProp fadeToColorProp = new FadeToColorProp(); + private final TextColorProp textColorProp = new TextColorProp(); + private final MinuteIntervalProp minuteIntervalProp = new MinuteIntervalProp(); + private final MinimumDateProp minimumDateProp = new MinimumDateProp(); + private final MaximumDateProp maximumDateProp = new MaximumDateProp(); + private final UtcProp utcProp = new UtcProp(); + private final HeightProp heightProp = new HeightProp(); private final HashMap props = new HashMap() {{ put(DateProp.name, dateProp); @@ -102,5 +102,9 @@ public class State { return (Integer) heightProp.getValue(); } + public String getLocaleLanguageTag(){ + return localeProp.getLanguageTag(); + } + } diff --git a/android/src/main/java/com/henninghall/date_picker/props/LocaleProp.java b/android/src/main/java/com/henninghall/date_picker/props/LocaleProp.java index 3cae162..4e4bf7d 100644 --- a/android/src/main/java/com/henninghall/date_picker/props/LocaleProp.java +++ b/android/src/main/java/com/henninghall/date_picker/props/LocaleProp.java @@ -10,18 +10,31 @@ import java.util.Locale; public class LocaleProp extends Prop { public static final String name = "locale"; + private String languageTag = getDefaultLanguageTag(); + public LocaleProp(){ - super( - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - ? Locale.forLanguageTag("en") - : Locale.getDefault() - ); + super(getDefaultLocale()); + } + + static private Locale getDefaultLocale(){ + return LocaleUtils.toLocale(getDefaultLanguageTag()); + } + + static private String getDefaultLanguageTag(){ + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP + ? Locale.getDefault().toLanguageTag().replace('-', '_') + : "en"; + } + + public String getLanguageTag(){ + return languageTag; } @Override public Locale toValue(Dynamic value){ - return LocaleUtils.toLocale(value.asString().replace('-','_')); + this.languageTag = value.asString().replace('-','_'); + return LocaleUtils.toLocale(languageTag); } } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java b/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java index 657e0e7..08f8822 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java @@ -66,6 +66,10 @@ public class UIManager { return new SimpleDateFormat(wheels.getFormatPattern(), state.getLocale()); } + String getDateString() { + return wheels.getDisplayValue(); + } + void animateToDate(Calendar date) { wheels.applyOnVisible(new AnimateToDate(date)); } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java index ef91e35..b3ab16b 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java @@ -49,6 +49,7 @@ public class WheelChangeListenerImpl implements WheelChangeListener { else if (maxDate != null && date.after(maxDate)) uiManager.animateToDate(maxDate); else { event.putString("date", Utils.dateToIso(date)); + event.putString("dateString", uiManager.getDateString()); DatePickerManager.context.getJSModule(RCTEventEmitter.class) .receiveEvent(rootView.getId(), "dateChange", event); } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java index d7e649a..3b5a700 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java @@ -110,6 +110,14 @@ public class Wheels { + ampmWheel.getValue(); } + String getDisplayValue() { + StringBuilder sb = new StringBuilder(); + for (Wheel wheel: getOrderedVisibleWheels()) { + sb.append(wheel.getDisplayValue()); + } + return sb.toString(); + } + private void addInOrder(){ ArrayList wheels = state.derived.getOrderedVisibleWheels(); for (WheelType wheelType : wheels) { diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java index 06075e9..59af7d7 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java @@ -3,16 +3,18 @@ package com.henninghall.date_picker.wheels; import android.graphics.Paint; import android.text.TextUtils; +import com.henninghall.date_picker.DayFormats; import com.henninghall.date_picker.LocaleUtils; import com.henninghall.date_picker.State; import com.henninghall.date_picker.models.Mode; -import com.henninghall.date_picker.PickerView; import com.henninghall.date_picker.Utils; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import cn.carbswang.android.numberpickerview.library.NumberPickerView; @@ -21,6 +23,7 @@ public class DayWheel extends Wheel { private String todayValue; private static int defaultNumberOfDays = Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_YEAR); + private HashMap displayValues; public DayWheel(NumberPickerView picker, State state) { super(picker, state); @@ -29,12 +32,15 @@ public class DayWheel extends Wheel { @Override public ArrayList getValues() { ArrayList values = new ArrayList<>(); + displayValues = new HashMap<>(); + Calendar cal = getStartCal(); Calendar endCal = getEndCal(); while (!cal.after(endCal)){ - String value = getValueFormat(cal); + String value = getValue(cal); values.add(value); + displayValues.put(value, getDisplayValue(cal)); if(Utils.isToday(cal)) todayValue = value; cal.add(Calendar.DATE, 1); } @@ -86,10 +92,22 @@ public class DayWheel extends Wheel { cal.set(Calendar.MILLISECOND, 0); } - private String getValueFormat(Calendar cal){ + private String getValue(Calendar cal){ return format.format(cal.getTime()); } + private String getDisplayValue(Calendar cal){ + return getDisplayValueFormat().format(cal.getTime()); + } + + private String getDisplayValueFormatPattern(){ + return DayFormats.get(state.getLocaleLanguageTag()); + } + + private SimpleDateFormat getDisplayValueFormat(){ + return new SimpleDateFormat(getDisplayValueFormatPattern(), state.getLocale()); + } + @Override public boolean visible() { return state.getMode() == Mode.datetime; @@ -108,7 +126,7 @@ public class DayWheel extends Wheel { if (value.equals(todayValue)) { return toTodayString(value); } - return removeYear(value); + return displayValues.get(value); } @Override @@ -124,12 +142,6 @@ public class DayWheel extends Wheel { : todayString; } - private String removeYear(String value) { - ArrayList pieces = Utils.splitOnSpace(value); - pieces.remove(LocaleUtils.getFullPatternPos("y", state.getLocale())); - return TextUtils.join(" ", pieces); - } - // Rounding cal to closest minute interval private Calendar getInitialDate() { Calendar cal = Calendar.getInstance(); diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java index 56a4128..671e009 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java @@ -76,6 +76,10 @@ public abstract class Wheel { init(); } + public String getDisplayValue(){ + return toDisplayValue(getValueAtIndex(getIndex())); + } + private String[] getDisplayValues(ArrayList values){ ArrayList displayValues = new ArrayList<>(); for (String value: values) { diff --git a/examples/detox/e2e/tests/displayText.spec.js b/examples/detox/e2e/tests/displayText.spec.js new file mode 100644 index 0000000..5123f61 --- /dev/null +++ b/examples/detox/e2e/tests/displayText.spec.js @@ -0,0 +1,40 @@ +const { setLocale, expectDateString, scrollWheel } = require('../utils') + +describe('Display text', () => { + before(async () => { + await device.reloadReactNative() + await element(by.text('Advanced')).tap() + }) + + describe('datetime', () => { + it('en-US', async () => { + await expectLocaleDateString('en-US', 'Sun Jan 2' + '1200 AM ') + }) + + it('pt-BR', async () => { + await expectLocaleDateString('pt-BR', 'dom 2 de jan' + '1200 AM ') + }) + + it('sv-SE', async () => { + await expectLocaleDateString('sv-SE', 'sön 2 jan.' + '1200 fm ') + }) + + it('ru-RU', async () => { + await expectLocaleDateString('ru-RU', 'вс 2 янв.' + '1200 AM ') + }) + + it('ko', async () => { + await expectLocaleDateString('ko', '1월 2일 일 오전 1200') + }) + + it('zh-CH', async () => { + await expectLocaleDateString('zh-CH', '1月2日周日 上午 1200') + }) + }) + + const expectLocaleDateString = async (locale, dateString) => { + await setLocale(locale) + await scrollWheel(0, 1) + await expectDateString(dateString) + } +}) diff --git a/examples/detox/e2e/utils.js b/examples/detox/e2e/utils.js index a04120c..c7e73e5 100644 --- a/examples/detox/e2e/utils.js +++ b/examples/detox/e2e/utils.js @@ -1,39 +1,43 @@ +const expectDate = async date => { + await expect(element(by.id('dateOutput'))).toHaveText(date) +} -const expectDate = async (date) => { - await expect(element(by.id('dateOutput'))).toHaveText(date) +const expectDateString = async date => { + await expect(element(by.id('dateStringOutput'))).toHaveText(date) } const reset = async () => { - await element(by.id('props/scroll')).tap() - await element(by.id('reset')).tap() + await element(by.id('props/scroll')).tap() + await element(by.id('reset')).tap() } const scrollWheel = async (index, times) => { - await element(by.id('props/scroll')).tap() - await element(by.id('wheelIndex')).replaceText(`${index}`) - await element(by.id('scrollTimes')).replaceText(`${times}`) - await element(by.id('doScroll')).tap() + await element(by.id('props/scroll')).tap() + await element(by.id('wheelIndex')).replaceText(`${index}`) + await element(by.id('scrollTimes')).replaceText(`${times}`) + await element(by.id('doScroll')).tap() } const changeProp = name => async value => { - await element(by.id('propName')).replaceText(name) - await element(by.id('propValue')).replaceText(`${value}`) - await element(by.id('changeProp')).tap() + await element(by.id('propName')).replaceText(name) + await element(by.id('propValue')).replaceText(`${value}`) + await element(by.id('changeProp')).tap() } const scrollWheelWithIndexAndExpectDate = async (index, expectedDate) => { - await scrollWheel(index, 1) - await expectDate(expectedDate) - await reset() + await scrollWheel(index, 1) + await expectDate(expectedDate) + await reset() } -exports.setDate = changeProp("date") -exports.setLocale = changeProp("locale") -exports.setMinimumDate = changeProp("minimumDate") -exports.setMaximumDate = changeProp("maximumDate") -exports.setMinuteInterval = changeProp("minuteInterval") -exports.setMode = changeProp("mode") +exports.setDate = changeProp('date') +exports.setLocale = changeProp('locale') +exports.setMinimumDate = changeProp('minimumDate') +exports.setMaximumDate = changeProp('maximumDate') +exports.setMinuteInterval = changeProp('minuteInterval') +exports.setMode = changeProp('mode') exports.scrollWheel = scrollWheel exports.expectDate = expectDate +exports.expectDateString = expectDateString exports.scrollWheelWithIndexAndExpectDate = scrollWheelWithIndexAndExpectDate exports.reset = reset diff --git a/examples/detox/src/examples/Advanced.js b/examples/detox/src/examples/Advanced.js index 10ac716..fd318a3 100644 --- a/examples/detox/src/examples/Advanced.js +++ b/examples/detox/src/examples/Advanced.js @@ -36,6 +36,7 @@ export default class Advanced extends Component { maximumDate: defaultMaxDate, timeZoneOffsetInMinutes: undefined, minuteInterval: 1, + dateString: '', } render() { @@ -50,6 +51,7 @@ export default class Advanced extends Component { ref={ref => (this.ref = ref)} date={this.state.date} onDateChange={this.setDate} + onDateStringChange={this.setDateString} locale={this.state.locale} minuteInterval={this.state.minuteInterval} minimumDate={this.state.minimumDate} @@ -60,6 +62,7 @@ export default class Advanced extends Component { timeZoneOffsetInMinutes={this.state.timeZoneOffsetInMinutes} /> {readableDate(this.state.date)} + {this.state.dateString} Change prop: @@ -178,6 +181,7 @@ export default class Advanced extends Component { onSelect = selectedProp => this.setState({ selectedProp }) setDate = date => this.setState({ date }) + setDateString = dateString => this.setState({ dateString }) scroll = ({ wheelIndex, scrollTimes }) => { if (!this.ref) return