J'essaye de formater une chaîne de date dans React Native.

Ex: 2016-01-04 10:34:23

Voici le code que j'utilise.

var date = new Date("2016-01-04 10:34:23");
console.log(date);

Mon problème est que lorsque j'émule cela sur un iPhone 6S, il imprimera Mon Jan 04 2016 10:34:23 GMT+0530 (IST) sans aucun problème. Mais si j'essaye avec l'iPhone 5S, il n'imprime rien. Et si vous essayez d'obtenir le mois en utilisant une méthode comme date.getMonth(), il imprimera "NaN".

Pourquoi est-ce? Quelle est la solution de contournement?

45
Nimila Hiranya 4 janv. 2016 à 14:41

5 réponses

Meilleure réponse

La beauté de React Native est qu'il prend en charge de nombreuses bibliothèques JS comme Moment.js. Utiliser moment.js serait un moyen meilleur / plus simple de gérer la date / heure au lieu de coder à partir de zéro

Exécutez simplement ceci dans le terminal (yarn add moment fonctionne également si vous utilisez le gestionnaire de paquets intégré de React):

npm install moment --save

Et dans votre page React Native js:

import Moment from 'moment';

render(){
    Moment.locale('en');
    var dt = '2016-05-02T00:00:00';
    return(<View> {Moment(dt).format('d MMM')} </View>) //basically you can do all sorts of the formatting and others
}

Vous pouvez consulter la documentation officielle de moment.js ici https://momentjs.com/docs/

116
chris Frisina 25 févr. 2020 à 04:48

Il n'est pas nécessaire d'inclure une bibliothèque volumineuse telle que Moment.js pour résoudre un problème aussi simple.

Le problème auquel vous êtes confronté n'est pas lié au formatage, mais à l'analyse.

Comme John Shammas le mentionne dans une autre réponse, le constructeur Date (et Date.parse) sont pointilleux sur l'entrée. Votre 2016-01-04 10:34:23 peut fonctionner dans une implémentation JavaScript, mais pas nécessairement dans l'autre.

Selon la spécification d'ECMAScript 5.1, {{ X0}} prend en charge (une simplification de) ISO 8601. C'est une bonne nouvelle, car votre date est déjà très semblable à ISO 8601.

Tout ce que vous avez à faire est de changer un peu le format d'entrée. Échangez l'espace pour un T: 2016-01-04T10:34:23; et éventuellement ajouter un fuseau horaire (2016-01-04T10:34:23+01:00), sinon UTC est supposé.

21
pimmhogeling 19 juil. 2017 à 14:30
function getParsedDate(date){
  date = String(date).split(' ');
  var days = String(date[0]).split('-');
  var hours = String(date[1]).split(':');
  return [parseInt(days[0]), parseInt(days[1])-1, parseInt(days[2]), parseInt(hours[0]), parseInt(hours[1]), parseInt(hours[2])];
}
var date = new Date(...getParsedDate('2016-01-04 10:34:23'));
console.log(date);

En raison des écarts dans l'analyse des chaînes de date, il est recommandé de toujours analyser manuellement les chaînes car les résultats sont incohérents, en particulier entre les différentes implémentations d'ECMAScript où des chaînes telles que "2015-10-12 12:00:00" peuvent être analysées comme NaN, UTC ou fuseau horaire local.

... comme décrit dans la ressource:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

2
Maciej Jureczko 20 oct. 2017 à 09:15

Le constructeur Date est très pointilleux sur ce qu'il permet. La chaîne que vous transmettez doit être prise en charge par Date.parse (), et si elle n'est pas prise en charge, elle renverra NaN. Différentes versions de JavaScript prennent en charge différents formats, si ces formats diffèrent de la documentation officielle ISO.

Voir les exemples ici pour ce qui est pris en charge: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

1
John Shammas 4 janv. 2016 à 18:06

Écrivez la fonction ci-dessous pour obtenir la date sous forme de chaîne, convertir et renvoyer au format chaîne.

getParsedDate(strDate){
    var strSplitDate = String(strDate).split(' ');
    var date = new Date(strSplitDate[0]);
    // alert(date);
    var dd = date.getDate();
    var mm = date.getMonth() + 1; //January is 0!

    var yyyy = date.getFullYear();
    if (dd < 10) {
        dd = '0' + dd;
    }
    if (mm < 10) {
        mm = '0' + mm;
    }
    date =  dd + "-" + mm + "-" + yyyy;
    return date.toString();
}

Imprimez-le là où vous le souhaitez: Date: {this.getParsedDate (stringDate)}

1
iAnkit 5 août 2019 à 13:05