Android: material date picker opens on the wrong day

Ouverte Adaptée aux débutants
#1,077 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, react-native
Domaine
mobile

Piste de recherche

Commence par android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt, en particulier setInitialDate() et la façon dont RNDate fournit la date sélectionnée. Vérifie si les tests du sélecteur de date Android couvrent timeZoneName et les dates proches des limites des jours UTC. Le travail est terminé lorsque le sélecteur s’ouvre sur le jour calendaire local prévu dans tous les fuseaux horaires et qu’un test couvre la régression.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Hi!

Thank you for your work on this project!

RNMaterialDatePicker passes the raw value timestamp to setSelection, but MaterialDatePicker interprets the selection as a UTC day. The initial day therefore ignores timeZoneName and the device time zone, and can be off by one.

For example, with timeZoneName: 'Europe/Brussels', a value of 10 November 00:10 opens on 9 November, because that moment is still 9 November in UTC. Zones behind UTC can open a day late in the same way.

This diff solved the problem, but I'm not sure if it's the ideal solution:

diff --git a/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt b/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
index 9dece7a..d1910aa 100644
--- a/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
+++ b/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
@@ -16,6 +16,7 @@ import com.google.android.material.datepicker.MaterialDatePicker
 import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener
 import com.google.android.material.R
 import java.util.Calendar
+import java.util.TimeZone
 
 class RNMaterialDatePicker(
   private val args: Bundle,
@@ -46,7 +47,11 @@ class RNMaterialDatePicker(
 
   private fun setInitialDate() {
     val initialDate = RNDate(args)
-    builder.setSelection(initialDate.timestamp())
+    // Material reads the selection as a UTC day, so pass the day in the picker's time zone as UTC midnight
+    val selection = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
+    selection.clear()
+    selection.set(initialDate.year(), initialDate.month(), initialDate.day())
+    builder.setSelection(selection.timeInMillis)
   }
 
   private fun setTitle() {

This issue body was partially generated by patch-package.

Langage dominant
JavaScript
Étoiles
2.9k
Forks
459
Merge moyen
4 j 16 h
PR mergées (30 j)
5

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de react-native-datetimepicker/datetimepicker

Toutes les issues de react-native-datetimepicker/datetimepicker

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.