Comment analyser la norme ISO 8601 en format de date et heure à l'aide de Moment js en Javascript?
Je suis actuellement en utilisant Moment js pour analyser un ISO 8601 chaîne en date et de l'heure, mais il ne fonctionne pas correctement. Ce que je fais mal? Et je voudrais prendre aucune autres solutions plus simples ainsi.
La norme ISO 8601, je voudrais analyser: "2011-04-11T10:20:30Z"
en date en chaîne de caractères: "2011-04-11"
et de temps en chaîne: "10:20:30"
Et essayé console.log(moment("2011-04-11T10:20:30Z" ,moment.ISO_8601))
et console.log(moment("2011-04-11T10:20:30Z" , ["YYYY",moment.ISO_8601])
comme un test, mais elle retourne un objet avec tous les différents types de propriétés.
- Avec la manipulation de la chaîne:
str.slice(0, -1).split('T');
Vous devez vous connecter pour publier un commentaire.
Avec moment.js
JS:
HTML:
Ou tout simplement avec la manipulation de la chaîne
JS:
$(document.getElementById('foo'))
; il fonctionne, mais la plupart des gens d'utiliser l'outil tout au long du processus ($('#foo')
). De même ici, cette réponse travaille, mais vous perdez beaucoup de profit Instant vous donne en faisant de la chaîne et la date de l'analyse manuelle. À mon humble avis, vous seriez mieux servis dans le long terme, par l'apprentissage de l'utilisation de votre outil (Instant) que de l'abandonner.className
sur un élément référencé par unid
, si c'était la seule chose qui était nécessaire. Utiliser le bon outil pour le travail, mais garder les choses simples.Il y a deux parties au moment de l'opération: la lecture de la date et de l'heure, et cracher à revenir. Vous avez la première partie:
mais alors vous avez besoin d'appeler une fonction de sortie, par exemple:
2011-04-11 3:20:30 am
. Si la date est correcte mais l'heure est faux. Ne devrait-elle pas être hh:mm:ss? Essayé, mais vient encore à 03 plutôt que 10."2011-04-11"
et le temps de chaîne:"10:20:30"
j'ai regardé les docs, mais n'a pas beaucoup d'aide.h
= "1" ...hh
= "01" ...H
= "13" ...HH
= "13". Ces deux dernières sont les mêmes pour 1pm, mais si nous passons à 1h du matin, ils deviennent:H
= "1" ...HH
= "01". En d'autres termes, la capitalisation contrôle si le temps est de 12 ou 24, et de deux lettres indique ce Moment pad le temps avec "0". Je ne peux pas dire à partir de votre question si vous souhaitez rembourrage ou pas, ou si vous voulez de 12 ou de 24 heures de temps, parce que vous avez choisi 10 à titre d'exemple (et c'est la même chose dans tous les quatre formats).Z
. Qui est UTC. Il vous manque ceci: momentjs.com/docs/#/parsing/utcHH
, donc là vous allez 🙂 Comme pour la journée, je pense que c'est lié à l'horaire question (rappelez-vous, à 1H du matin aujourd'hui est à 11H hier à quelqu'un deux fuseaux horaires plus loin). Fixer votre fuseau horaire et il doit fixer le jour et l'heure des questions (et par "solution", je veux dire soit votre serveur traduire toutes les dates de GMT/UTC 0 fuseau horaire avant l'Instant les voit, ou utiliserhttp://momentjs.com/timezone/
à dire Moment quel fuseau horaire est venu le temps de; personnellement, je recommande l'ancienne, comme il simplifie les choses tout autour si votre serveur ne cesse de tous les temps en GMT).HH
et il m'a donné 17:20:30 quand il doit être 00:20:30. Et pourriez-vous préciser sur la fixation de l'horaire? Suis-je censé le spécifier dansmoment
? N'ai pas @Xotic750 mentionner que Z est en fait le fuseau horaire? Je veux simplement l'imprimer exactement comment la norme ISO 8601 chaîne est passée dans."10:20:30"
vous n'êtes pas en disant: "10:20:30 dans mon fuseau horaire", vous dites "10:20:30 GMT/UTC 0" (ie. "10:20:30 dans la Grande-Bretagne"). Si vous voulez "10:20:30" dans votre fuseau horaire, vous devez d'abord les convertir à GMT avant l'Instant qu'il obtient, ou (après un Instant qu'il obtient) que vous devez dire Moment de le traduire (avec Moment fuseau horaire). Mais encore une fois, juste globale de votre application, les choses vont probablement être plus simple si votre serveur peut stocker tout temps UTC 0/heure GMT.