J'ai remarqué que la new Date()
fonction JavaScript 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 trouvé aucune documentation montrant tous les formats de chaîne valides lors de l'appel de la new Date()
fonction.
C'est pour convertir une chaîne en une 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 formater un objet date en chaîne.
Note de l'éditeur: L'approche suivante est la tentative du demandeur qui a fonctionné sur un navigateur particulier mais ne fonctionne pas en général; voir les réponses sur cette page pour voir quelques solutions réelles.
Aujourd'hui, j'ai joué avec la toString()
méthode sur l'objet date et, étonnamment, elle sert à formater 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 dont nous pouvons formater l'objet date dans une chaîne.
Où est la documentation qui répertorie les spécificateurs de format pris en charge par l' Date()
objet?
la source
Réponses:
J'adore 10 façons de formater l'heure et la date à l'aide de JavaScript et de l'utilisation des dates .
Fondamentalement, vous avez trois méthodes et vous devez combiner les chaînes pour vous-même:
Exemple:
la source
Moment.js
Il s'agit d'une bibliothèque de dates JavaScript (légère) * pour l'analyse, la manipulation et le formatage des dates.
(*) léger signifiant 9,3 Ko minifié + compressé dans la plus petite configuration possible (fév 2014)
la source
Si vous utilisez déjà jQuery UI dans votre projet, vous pouvez utiliser la méthode intégrée datepicker pour formater votre objet date:
Cependant, le sélecteur de date ne met en forme que les dates et ne peut pas formater les heures.
Jetez un oeil à jQuery UI datepicker formatDate , les exemples.
la source
Je suis tombé sur ce sujet aujourd'hui et j'ai été très surpris que personne n'ait pris 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 prend pas en charge les spécificateurs de format de la manière dont vous avez indiqué que vous souhaitez les utiliser . Mais il fait des méthodes de soutien pour le formatage des dates et / ou temps, tels que
.toLocaleDateString()
,.toLocaleTimeString()
et.toUTCString()
.La
Date
référence d'objet que j'utilise le plus souvent se trouve sur le site w3schools.com (mais une recherche rapide sur Google en révèlera bien d'autres qui pourraient mieux répondre à vos besoins).Notez également que la section Propriétés de l'objet Date 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 au sein de la communauté JavaScript au fil des ans sur la question de savoir s'il s'agit ou non de la meilleure pratique, et je ne plaide pas pour ou contre, juste pour souligner son existence.la source
Fonction de formatage personnalisé:
Pour les formats fixes, une fonction simple fait l'affaire. L'exemple suivant génère le format international AAAA-MM-JJ:
Remarque: Cependant, ce n'est généralement pas une bonne idée 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 y a beaucoup de bibliothèques autour desquelles cela se fait. Quelques autres réponses les énumèrent déjà. Mais l'augmentation des dépendances a également sa contrepartie.
Fonctions de formatage ECMAScript standard:
Depuis les versions plus récentes d'ECMAscript, la
Date
classe a des fonctions de formatage spécifiques:Remarque: il est possible de générer une sortie personnalisée à partir de ces fonctions de formatage:
la source
La réponse courte
Il n'y a pas de documentation «universelle» à laquelle javascript s'adresse; chaque navigateur qui a javascript est vraiment une implémentation. Cependant, il existe une norme que la plupart des navigateurs 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 y a une deuxième norme établie par l' IETF que les navigateurs ont tendance à suivre également, qui est la définition des horodatages faite dans la 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 à des fonctionnalités de base, mais ce qui «devrait» ne pas être intrinsèquement ce qui «est». Je vais cependant approfondir cette procédure, car il semble que seules trois personnes ont répondu à la question (Scott, goofballLogic et Peller notamment), ce qui, pour moi, suggère que la plupart des gens ne savent pas ce qui se passe réellement lorsque vous créer un objet Date.
La réponse longue
Pour répondre à la question, ou même généralement chercher la réponse à cette question, vous devez savoir que javascript n'est pas une langue nouvelle; il s'agit en fait d'une implémentation d'ECMAScript et suit les normes ECMAScript (mais notez que javascript est également antérieur à ces normes; les normes EMCAScript sont construites à partir de l'implémentation précoce 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 a été publiée peu de temps après la publication à la fin de 2009. Cela devrait indiquer un problème; quelle norme une implémentation javascript peut suivre, peut ne pas refléter ce qui est réellement en place, car a) c'est une implémentation d'une norme donnée, b) toutes les implémentations d'une norme ne sont pas puritaines,
Essentiellement, lorsque vous traitez avec javascript, vous avez affaire à un dérivé (javascript spécifique au navigateur) d'une implémentation (javascript lui-même). Par exemple, le V8 de Google implémente ECMAScript 5.0, mais JScript d'Internet Explorer ne tente de se conformer à aucune norme ECMAScript, mais Internet Explorer 9 est conforme à ECMAScript 5.0.
Lorsqu'un seul argument est passé à new Date (), il convertit ce prototype de fonction:
Lorsque deux ou plusieurs arguments sont passés à new Date (), il convertit ce prototype de fonction:
Ces deux fonctions devraient vous sembler familières, mais cela ne répond pas immédiatement à votre question et ce qui quantifie comme un «format de date» acceptable nécessite des explications supplémentaires. Lorsque vous passez une chaîne à new Date (), il appellera le prototype (notez que j'utilise le mot prototype de façon lâche; les versions peuvent être des fonctions individuelles ou faire partie d'une instruction conditionnelle dans une seule fonction) pour new Date (valeur) avec votre chaîne comme argument pour le paramètre «value». Cette fonction vérifiera d'abord s'il s'agit d'un nombre ou d'une chaîne. La documentation de cette fonction se trouve ici:
De cela, nous pouvons déduire que pour obtenir le formatage de chaîne autorisé pour la nouvelle date (valeur), nous devons examiner la méthode Date.parse (chaîne). La documentation de cette méthode se trouve ici:
Et nous pouvons en déduire que les dates devraient être dans un format étendu ISO 8601 modifié, comme spécifié ici:
Cependant, nous pouvons reconnaître par expérience que l'objet Date de javascript accepte d'autres formats (imposé par l'existence de cette question en premier lieu), et cela ne pose pas de problème car ECMAScript permet la mise en œuvre de formats spécifiques. 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 examiner l'implémentation javascript de Google, V8; veuillez noter que je ne suggère pas que ce soit 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 que c'est juste à supposer qu'ils suivent les attentes modernes.
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».
Cela appelle% DateParseString, qui est en fait une référence de fonction d'exécution pour une fonction C ++. Il fait référence au code suivant:
L'appel de fonction qui nous intéresse dans cette fonction est pour DateParser :: Parse (); ignorer la logique entourant ces appels de fonction, ce ne sont que des vérifications pour se conformer au type de codage (ASCII et UC16). DateParser :: Parse est défini ici:
C'est la fonction qui définit réellement les formats qu'elle accepte. Essentiellement, il vérifie la norme EMCAScript 5.0 ISO 8601 et s'il n'est pas conforme aux normes, il tentera de construire la date en fonction des formats hérités. Quelques points clés sur la base des commentaires:
Cela devrait donc être suffisant pour vous donner une idée de base de ce à quoi vous attendre quand il s'agit de passer une chaîne dans un objet Date. Vous pouvez développer cela en consultant les spécifications suivantes que Mozilla pointe sur le réseau de développeurs Mozilla (conformes aux horodatages IETF RFC 2822):
Le Microsoft Developer Network mentionne en outre une norme supplémentaire pour l'objet Date: ECMA-402, la spécification ECMAScript Internationalization API, qui complète la norme ECMAScript 5.1 (et les futures). Cela peut être trouvé ici:
Dans tous les cas, cela devrait aider à souligner 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 disponible pour donner un sens raisonnable aux chaînes acceptables pour un objet Date. Une question assez chargée quand on y pense, oui? : P
la source
Assurez-vous de vérifier Datejs lorsque vous traitez des dates en JavaScript. C'est assez impressionnant et bien documenté comme vous pouvez le voir dans le cas de la fonction toString .
EDIT : Tyler Forsythe souligne que datejs est obsolète. Je l'utilise dans mon projet actuel et je n'ai eu aucun problème avec cela, mais vous devez en être conscient et envisager des alternatives.
la source
Vous pouvez simplement développer l'
Date
objet avec une nouvelleformat
méthode comme l'a noté meizz , ci-dessous est le code donné par l'auteur. Et voici un jsfiddle .la source
console.log(new Date('2014-06-01')) -> May
je pense que cela a quelque chose à voir avec le fuseau horaire: DLa fonctionnalité que vous citez n'est pas du Javascript standard, il est peu probable qu'elle soit portable sur tous les navigateurs et n'est donc pas une bonne pratique. La spécification ECMAScript 3 laisse la fonction d'analyse et de format de sortie à l'implémentation Javascript. ECMAScript 5 ajoute un sous-ensemble de prise en charge ISO8601. Je pense que la fonction toString () que vous mentionnez est une innovation dans un navigateur (Mozilla?)
Plusieurs bibliothèques fournissent des routines pour paramétrer cela, certaines avec un support étendu de localisation. Vous pouvez également consulter les méthodes dans dojo.date.locale .
la source
J'ai fait ce formateur très simple, il est coupé / n / collable (mis à jour avec une version plus soignée):
http://snipplr.com/view/66968.82825/
la source
new DateFmt()
)Cadre gratuit, limité mais léger
la source
DateJS est certainement complet, mais je recommanderais cette librairie BEAUCOUP plus simple (format de date JavaScript) que je préfère simplement parce que ce n'est que 120 lignes environ.
la source
Après avoir examiné plusieurs des options fournies dans d'autres réponses, j'ai décidé d'écrire ma propre solution limitée mais simple que d'autres pourraient également trouver utile.
Exemple d'utilisation:
la source
format = format.replace("YY", (""+date.getFullYear()).substring(2));
. Cependant, cela devient moche - vous voudrez probablement emprunter la route RegEx ou similaire à la place.Voici une fonction que j'utilise beaucoup. Le résultat est aaaa-mm-jj hh: mm: ss.nnn.
la source
Vous pouvez trouver utile cette modification de l'objet date, qui est plus petite que n'importe quelle bibliothèque et est facilement extensible pour prendre en charge différents formats:
REMARQUE:
CODE
UTILISATION
la source
Juste pour continuer la réponse solide de Gongzhitaao - cela gère AM / PM
la source
Je n'ai pas pu trouver de documentation définitive sur les formats de date valides, j'ai donc écrit mon propre test pour voir ce qui est pris en charge dans divers navigateurs.
http://blarg.co.uk/blog/javascript-date-formats
Mes résultats ont conclu que les formats suivants sont valables dans tous les navigateurs que j'ai testés (les exemples utilisent la date "9 août 2013"):
[Année complète] / [Mois] / [Numéro de date] - Le mois peut être le nombre avec ou sans zéro non significatif ou le nom du mois en format court ou long, et le numéro de date peut être avec ou sans zéro non significatif.
[Mois] / [Année complète] / [Numéro de date] - Le mois peut être le nombre avec ou sans zéro non significatif ou le nom du mois en format court ou long, et le numéro de date peut être avec ou sans zéro non significatif.
Toute combinaison de [Année complète], [Nom du mois] et [Numéro de date] séparés par des espaces - Le nom du mois peut être au format court ou long, et le numéro de la date peut être avec ou sans zéro non significatif.
Également valable dans les "navigateurs modernes" (ou en d'autres termes tous les navigateurs sauf IE9 et inférieurs)
[Année complète] - [Numéro de mois] - [Numéro de date] - Le numéro de mois et de date doit inclure des zéros non significatifs (c'est le format utilisé par le type de date MySQL )
Utilisation des noms de mois:
Fait intéressant, lorsque j'ai utilisé des noms de mois, j'ai découvert que seuls les 3 premiers caractères du nom de mois sont utilisés, de sorte que tous les éléments suivants sont parfaitement valides:
la source
Le formatage et en particulier l'analyse des dates en JavaScript peut être un peu un casse-tête. Tous les navigateurs ne traitent pas les dates de la même manière. Ainsi, bien qu'il soit utile de connaître les méthodes de base, il est plus pratique d'utiliser une bibliothèque d'assistance.
La bibliothèque javascript XDate par Adam Shaw existe depuis la mi-2011 et est toujours en développement actif. Il a une documentation fantastique, une excellente API, un formatage, essaie de rester rétrocompatible et prend même en charge les chaînes localisées.
Lien pour changer les chaînes de paramètres régionaux: https://gist.github.com/1221376
la source
Exemple de code:
Production:
la source
new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100
, la sortie avec le code ci-dessus sera"16:48:22"
La bibliothèque sugar.js a de grandes fonctionnalités pour travailler avec des dates en JavaScript. Et c'est très bien documenté .
Quelques exemples:
la source
Tous les navigateurs
La façon la plus fiable de formater une date avec le format source que vous utilisez est d'appliquer les étapes suivantes:
new Date()
pour créer unDate
objet.getDate()
,.getMonth()
et.getFullYear()
pour obtenir respectivement le jour, le mois et l'annéeExemple :
(Voir aussi ce violon ).
Navigateurs modernes uniquement
Vous pouvez également utiliser la
.toLocaleDateString
méthode intégrée pour effectuer le formatage pour vous. Vous avez juste besoin de transmettre les paramètres régionaux et les options appropriés pour correspondre au bon format, qui n'est malheureusement pris en charge que par les navigateurs modernes (*) :(Voir aussi ce violon ).
(*) Selon le MDN , "navigateurs modernes" signifie Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ et Safari tous les soirs
la source
Juste une autre option, que j'ai écrite:
Bibliothèque DP_DateExtensions
Je ne sais pas si cela vous aidera, mais je l'ai trouvé utile dans plusieurs projets - il semble qu'il fera ce dont vous avez besoin.
Prend en charge le formatage de la date et de l'heure, les calculs de date (ajouter / soustraire des parties de date), la comparaison de date, l'analyse de date, etc.
Aucune raison de le considérer si vous utilisez déjà un framework (ils sont tous capables), mais si vous avez juste besoin d'ajouter rapidement une manipulation de date à un projet, donnez-lui une chance.
la source
Si vous souhaitez afficher uniquement l'heure avec deux chiffres, cela peut vous aider:
la source
utiliser ces fonctions
reportez-vous au lien ci-dessous pour plus de détails https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
la source
JsSimpleDateFormat est une bibliothèque qui peut formater l'objet date et réanalyser la chaîne formatée en objet Date. Il utilise le format Java (classe SimpleDateFormat). Le nom des mois et des jours peut être localisé.
Exemple:
la source
La réponse est "nulle part" puisque le formatage de la date est une fonctionnalité propriétaire. Je ne pense pas que les fonctions toString soient conçues pour se conformer à un format spécifique. Par exemple, dans la spécification ECMAScript 5.1 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2/8/2013, page 173), la fonction toString est documentée comme suit :
Des fonctions telles que les exemples ci-dessous peuvent être utilisées pour effectuer un formatage assez facilement.
la source
Si vous n'avez pas besoin de toutes les fonctionnalités fournies par une bibliothèque comme Moment.js , vous pouvez utiliser mon port de strftime . Il est léger (1,35 Ko contre 57,9 Ko minimisé par rapport à Moment.js 2.15.0) et fournit la plupart des fonctionnalités de
strftime()
.Exemple d'utilisation:
Le dernier code est disponible ici: https://github.com/thdoan/strftime
la source
La bonne façon de formater une date pour renvoyer "29/12/2012" est avec le script du format de date JavaScript :
Ce code ne fonctionne PAS:
la source
Personnellement, parce que j'utilise à la fois PHP et jQuery / javascript dans des mesures égales, j'utilise la fonction date de php.js http://phpjs.org/functions/date/
Utiliser une bibliothèque qui utilise les mêmes chaînes de format que quelque chose que je connais déjà est plus facile pour moi, et le manuel contenant toutes les possibilités de chaîne de format pour la fonction date est bien sûr en ligne sur php.net
Vous incluez simplement le fichier date.js dans votre HTML en utilisant votre méthode préférée, puis vous l'appelez comme ceci:
Vous pouvez utiliser d1.getTime () au lieu de valueOf () si vous le souhaitez, ils font la même chose.
La division par 1 000 de l'horodatage javascript est due au fait qu'un horodatage javascript est en millisecondes mais qu'un horodatage PHP est en secondes.
la source
De nombreux frameworks (que vous utilisez peut-être déjà) ont un formatage de date que vous ne connaissez peut-être pas. jQueryUI a déjà été mentionné, mais d'autres cadres tels que Kendo UI (Globalisation) , Yahoo UI (Util) et AngularJS les ont également.
la source