Formatage d'une chaîne de Date dans React Native
j'essaie 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, c'est que, quand je l'émule sur un iPhone 6S, il imprime Mon Jan 04 2016 10:34:23 GMT+0530 (IST)
sans aucun problème. Mais si j'essaie 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 va imprimer "NaN"
.
Pourquoi est-ce? Quelle est la solution?
4 réponses
la beauté du natif React est qu'il supporte beaucoup de JS Librarieis comme Moment.js. À l'aide de moment.js serait un moyen meilleur/plus facile de gérer la date/heure au lieu de coder à partir de zéro
il suffit de lancer ceci dans le terminal:
npm install moment --save
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 vérifier l'instant.js officiel docs ici https://momentjs.com/docs/
Il n'est pas nécessaire d'inclure une volumineuse bibliothèque comme Moment.js pour résoudre un tel problème.
le problème auquel vous faites face n'est pas le formatage, mais l'analyse.
comme le mentionne John Shammas dans une autre réponse, le Date
constructeur (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,Date.parse
soutient (une simplification de) ISO 8601. C'est une bonne nouvelle, parce que votre rencard est déjà très similaire à ISO 8601.
tout ce que vous avez à faire est de changer un peu le format d'entrée. Swap de 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é.
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 variations dans l'analyse des chaînes de date, il est recommandé toujours manuellement analyser les chaînes que les résultats sont incohérents, en particulier dans les différentes implémentations ECMAScript où les chaînes comme "2015-10-12 12: 00: 00" Peut être interprété comme NaN, UTC ou local fuseau.
... comme décrit dans la ressource:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
le constructeur de Date est très difficile sur ce qu'il permet. La chaîne dans laquelle vous passez doit être supportée par Date.parse(), et si il est pris en charge, il sera de retour 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 supporté: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse