Question Où puis-je trouver de la documentation sur le formatage d'une date en JavaScript? [fermé]


J'ai remarqué que JavaScript new Date() La fonction est très intelligente pour accepter des dates dans plusieurs formats.

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

Je n'ai pas trouvé de documentation où que ce soit montrant tous les formats de chaînes valides lors de l'appel new Date() fonction.

C'est pour convertir une chaîne en date. Si nous regardons le côté opposé, c'est-à-dire, la conversion d'un objet date en chaîne, jusqu'à présent, j'avais l'impression que JavaScript n'avait pas d'API intégrée pour mettre en forme un objet date dans une chaîne.

Note de l'éditeur: L'approche suivante est la tentative du demandeur qui a travaillé sur un navigateur particulier, mais fait ne pas travailler en général; voir les réponses sur cette page pour voir des solutions réelles.

Aujourd'hui, j'ai joué avec le toString() méthode sur l'objet date et étonnamment, il sert à la mise en forme de la date aux chaînes.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

Ici aussi, je n'ai trouvé aucune documentation sur toutes les façons de formater l'objet date en une chaîne.

Où se trouve la documentation répertoriant les spécificateurs de format pris en charge par Date() objet?


1293
2018-06-29 05:46


origine


Réponses:


J'aime 10 façons de mettre en forme l'heure et la date en utilisant JavaScript et Travailler avec des dates.

Fondamentalement, vous avez trois méthodes et vous devez combiner les chaînes pour vous-même:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

Exemple:

        var d = new Date();
        var curr_date = d.getDate();
        var curr_month = d.getMonth() + 1; //Months are zero based
        var curr_year = d.getFullYear();
        console.log(curr_date + "-" + curr_month + "-" + curr_year);


1010
2018-04-12 07:18



Moment.js

Il s'agit d'une bibliothèque de date (légère) * JavaScript pour l'analyse, la manipulation et la mise en forme des dates.

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) poids léger 9.3KB minifié + gzippé dans la plus petite configuration possible (feb 2014) 


670
2017-08-11 07:27



Si vous utilisez déjà interface utilisateur jQuery Dans votre projet, vous pouvez utiliser la méthode intégrée datepicker pour formater votre objet date:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

Cependant, le programme datepicker ne formate que les dates et ne peut pas formater les heures.

Jettes un coup d'oeil à jQuery UI datepicker formatDate, les exemples.


419
2017-08-03 16:55



Où se trouve la documentation répertoriant les spécificateurs de format pris en charge par Date() objet?

Je suis tombé dessus aujourd'hui et j'ai été très surpris que personne ne prenne le temps de répondre à cette simple question. Certes, il existe de nombreuses bibliothèques pour aider à la manipulation de la date. Certains sont meilleurs que d'autres. Mais ce n'était pas la question posée.

AFAIK, JavaScript pur ne supporte pas les spécificateurs de format la façon dont vous avez indiqué que vous aimeriez les utiliser. Mais il prend en charge les méthodes de mise en forme des dates et / ou des heures, telles que .toLocaleDateString(), .toLocaleTimeString(), et .toUTCString().

le Date référence d'objet que j'utilise le plus fréquemment est sur le site Web w3schools.com (mais une recherche rapide sur Google en révélera beaucoup d'autres qui pourraient mieux répondre à vos besoins).

Notez également que le Propriétés de l'objet Date section fournit un lien vers prototype, qui illustre certaines façons d'étendre l'objet Date avec des méthodes personnalisées. Il y a eu un débat dans la communauté JavaScript au fil des ans sur la question de savoir si c'est la meilleure pratique, et je ne préconise pas pour ou contre, juste en soulignant son existence.


215
2018-05-21 12:48



Fonction de formatage personnalisée:

Pour les formats fixes, une simple fonction fait le travail. L'exemple suivant génère le format international AAAA-MM-JJ:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

Remarque: Cependant, il n'est généralement pas judicieux d'étendre les bibliothèques standard Javascript (par exemple en ajoutant cette fonction au prototype de Date).

Une fonction plus avancée pourrait générer une sortie configurable basée sur un paramètre de format. Il y a quelques bons exemples dans cette même page.

Si écrire une fonction de formatage est trop long, il existe de nombreuses bibliothèques autour desquelles le faire. D'autres réponses les énumèrent déjà. Mais l'augmentation des dépendances a aussi son contre-partie.

Fonctions de formatage ECMAScript standard:

Depuis les versions plus récentes d'ECMAscript, le Date La classe a des fonctions de formatage spécifiques:

toDateString: En fonction de l'implémentation, affiche uniquement la date.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString: Afficher la date et l'heure ISO 8601.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON: Stringifier pour JSON.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString: Dépend de l'implémentation, une date au format locale.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString: Dépend de l'implémentation, date et heure au format locale.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString: Dépend de l'implémentation, une heure au format locale.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString: ToString générique pour la date.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Remarque: il est possible de générer des sorties personnalisées à partir de ces fonctions de formatage:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD

200
2017-07-02 20:07



La réponse courte

Il n'y a pas de documentation "universelle" sur laquelle javascript s'adresse; tout navigateur qui a javascript est vraiment une implémentation. Cependant, il existe une norme que les navigateurs les plus modernes ont tendance à suivre, et c'est la norme EMCAScript; les chaînes standard ECMAScript prendraient, au minimum, une implémentation modifiée de la définition ISO 8601.

En plus de cela, il existe un deuxième standard mis en avant par le IETF que les navigateurs ont tendance à suivre également, ce qui est la définition des horodatages faite dans le RFC 2822. La documentation réelle peut être trouvée dans la liste des références en bas.

De cela, vous pouvez vous attendre à une fonctionnalité de base, mais ce que "devrait" être n'est pas intrinsèquement ce qui "est". Je vais aller un peu en profondeur avec cette procédure, car il semble que seulement trois personnes ont répondu à la question (Scott, goofballLogic et peller), ce qui, selon moi, suggère que la plupart des gens ignorent ce qui se passe quand vous créer un objet Date.


La longue réponse

Où se trouve la documentation répertoriant les spécificateurs de format pris en charge par l'objet Date ()?


Pour répondre à la question, ou même rechercher la réponse à cette question, vous devez savoir que javascript n'est pas une langue originale; il s'agit en fait d'une implémentation d'ECMAScript, et suit les standards ECMAScript (mais notez que javascript est également antérieur à ces standards, les standards EMCAScript sont construits à partir de la première implémentation de LiveScript / JavaScript). La norme ECMAScript actuelle est 5.1 (2011); au moment où la question a été posée à l'origine (juin 2009), la norme était de 3 (4 ont été abandonnées), mais 5 ont été publiées peu après le poste à la fin de 2009. Cela devrait poser un problème; quelle implémentation javascript peut suivre, peut ne pas refléter ce qui est réellement en place, parce que a) c'est une implémentation d'un standard donné, b) toutes les implémentations d'un standard ne sont pas puritan, et c) la fonctionnalité n'est pas libérée en synchronisation avec un nouvelle norme comme d) une mise en œuvre est un travail constant en cours

Essentiellement, lorsque vous traitez avec javascript, vous avez affaire à un dérivé (javascript spécifique au navigateur) d'une implémentation (javascript en soi). Le V8 de Google, par exemple, implémente ECMAScript 5.0, mais JScript d'Internet Explorer ne tente pas de se conformer à n'importe quel standard ECMAScript, mais Internet Explorer 9 est conforme à ECMAScript 5.0.

Lorsqu'un seul argument est passé à new Date (), il lance ce prototype de fonction:

new Date(value)

Lorsque deux ou plusieurs arguments sont passés à new Date (), il lance ce prototype de fonction:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


Ces deux fonctions devraient vous sembler familières, mais cela ne répond pas immédiatement à votre question et ce qui est quantifié en tant que «format de date» acceptable nécessite des explications supplémentaires. Lorsque vous passez une chaîne à la nouvelle Date (), elle appellera le prototype (notez que j'utilise le mot prototype librement; les versions peuvent être des fonctions individuelles ou faire partie d'une instruction conditionnelle dans une seule fonction) pour nouvelle date (valeur) avec votre chaîne comme argument pour le paramètre "value". Cette fonction vérifie d'abord s'il s'agit d'un nombre ou d'une chaîne. La documentation de cette fonction peut être trouvée ici:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

De ceci, nous pouvons déduire que pour obtenir la mise en forme de chaîne autorisée pour la nouvelle date (valeur), nous devons regarder la méthode Date.parse (chaîne). La documentation de cette méthode peut être trouvée ici:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

Et nous pouvons en outre déduire que les dates devraient être dans un format étendu ISO 8601 modifié, comme spécifié ici:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

Cependant, nous pouvons reconnaître par expérience que l'objet Date de javascript accepte d'autres formats (imposés par l'existence de cette question en premier lieu), ce qui est correct car ECMAScript permet des formats spécifiques à l'implémentation. Cependant, cela ne répond toujours pas à la question de savoir quelle documentation est disponible sur les formats disponibles, ni quels formats sont réellement autorisés. Nous allons regarder l'implémentation javascript de Google, V8; S'il vous plaît noter que je ne suggère pas que c'est le "meilleur" moteur JavaScript (comment peut-on définir "meilleur" ou même "bon") et on ne peut pas supposer que les formats autorisés dans V8 représentent tous les formats disponibles aujourd'hui, mais je pense supposer qu'ils suivent les attentes modernes.

V8 de Google, date.js, DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

En regardant la fonction DateConstructor, nous pouvons déduire que nous devons trouver la fonction DateParse; cependant, notez que "année" n'est pas l'année réelle et n'est qu'une référence au paramètre "année".

Google V8, date.js, DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

Cela appelle% DateParseString, qui est en fait une référence de fonction d'exécution pour une fonction C ++. Il se réfère au code suivant:

Google V8, runtime.cc,% DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

L'appel de la fonction qui nous intéresse dans cette fonction est pour DateParser :: Parse (); ignorez la logique entourant ces appels de fonction, ce sont juste des vérifications pour se conformer au type d'encodage (ASCII et UC16). DateParser :: Parse est défini ici:

Google V8, dateparser-inl.h, DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

C'est la fonction qui définit réellement quels formats il accepte. Essentiellement, il vérifie la norme EMCAScript 5.0 ISO 8601 et, s'il n'est pas conforme aux normes, il tente de créer la date en fonction des formats hérités. Quelques points clés basés sur les commentaires:

  1. Les mots avant le premier nombre qui sont inconnus à l'analyseur sont ignorés.
  2. Le texte entre parenthèses est ignoré.
  3. Les nombres non signés suivis de ":" sont interprétés comme un "composant de temps".
  4. Les nombres non signés suivis de "." Sont interprétés comme un "composant de temps" et doivent être suivis en millisecondes.
  5. Les nombres signés suivis de l'heure ou de la minute d'heure (par exemple +5: 15 ou +0515) sont interprétés comme le fuseau horaire.
  6. Lorsque vous déclarez l'heure et la minute, vous pouvez utiliser "hh: mm" ou "hhmm".
  7. Les mots qui indiquent un fuseau horaire sont interprétés comme un fuseau horaire.
  8. Tous les autres nombres sont interprétés comme des "composants de date".
  9. Tous les mots commençant par les trois premiers chiffres d'un mois sont interprétés comme le mois.
  10. Vous pouvez définir des minutes et des heures dans l'un des deux formats: "hh: mm" ou "hhmm".
  11. Les symboles tels que "+", "-" et "" non apparié ")" ne sont pas autorisés après qu'un nombre a été traité.
  12. Les éléments qui correspondent à plusieurs formats (par exemple 1970-01-01) sont traités comme une chaîne conforme à la norme ISO 8601 EMCAScript 5.0 conforme.

Cela devrait donc suffire à vous donner une idée de base de ce à quoi il faut s'attendre quand il s'agit de passer une chaîne dans un objet Date. Vous pouvez approfondir cette question en examinant la spécification suivante, pointée par Mozilla sur le réseau de développeurs Mozilla (conforme aux horodatages de l'IETF RFC 2822):

http://tools.ietf.org/html/rfc2822#page-14

Le Microsoft Developer Network mentionne en outre une norme supplémentaire pour l'objet Date: ECMA-402, la spécification d'ECMAScript Internationalization API, qui est complémentaire à la norme ECMAScript 5.1 (et les futures). Cela peut être trouvé ici:

http://www.ecma-international.org/ecma-402/1.0/

Dans tous les cas, ceci devrait aider à mettre en évidence qu'il n'y a pas de "documentation" qui représente universellement toutes les implémentations de javascript, mais il y a encore suffisamment de documentation pour comprendre les chaînes acceptables pour un objet Date. Tout à fait la question chargée quand vous y pensez, oui? : P

Les références

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

Ressources

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

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


121
2017-11-19 11:31



Assurez-vous de payer Datejs lorsqu'il s'agit de dates en JavaScript. C'est assez impressionnant et bien documenté comme vous pouvez le voir en cas de Fonction toString.

MODIFIER: Tyler Forsythe fait remarquer que cette date est obsolète. Je l'utilise dans mon projet actuel et je n'ai eu aucun problème, cependant vous devriez être conscient de cela et envisager des alternatives.


91
2017-09-07 03:23