3536 votes

Comment formater une date en JavaScript

En JavaScript, comment puis-je formater un objet date pour qu'il s'imprime sous la forme suivante 10-Aug-2010 ?

336 votes

Comme d'habitude : attention LE MOIS est indexé à Zéro ! Donc janvier est zéro et non un...

34 votes

Attention aussi, myDate.getDay() ne renvoie pas le jour de la semaine, mais la fonction lieu du jour de la semaine liés à la semaine. myDate.getDate() renvoie le jour de semaine actuel .

4 votes

Pour le formatage des DateTimes en javascript, utilisez la fonction Intl.DateTimeFormat objet. Je le décris dans mon post : Poste . Je crée une solution en ligne pour votre réponse en Intl.DateTimeFormat Vérifier en ligne

1744voto

Marko Points 26030

Pour les formats de date délimités personnalisés, vous devez extraire les composants de date (ou d'heure) à partir d'un DateTimeFormat (qui fait partie de l'objet API d'internationalisation ECMAScript ), puis créez manuellement une chaîne avec les délimiteurs que vous voulez.

Pour ce faire, vous pouvez utiliser DateTimeFormat#formatToParts . Vous pourriez déstructurer le tableau, mais ce n'est pas l'idéal, car la sortie du tableau dépend de la locale :

{ // example 1
   let f = new Intl.DateTimeFormat('en');
   let a = f.formatToParts();
   console.log(a);
}
{ // example 2
   let f = new Intl.DateTimeFormat('hi');
   let a = f.formatToParts();
   console.log(a);
}

Le mieux serait de faire correspondre un tableau de formats aux chaînes de caractères résultantes :

function join(t, a, s) {
   function format(m) {
      let f = new Intl.DateTimeFormat('en', m);
      return f.format(t);
   }
   return a.map(format).join(s);
}

let a = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let s = join(new Date, a, '-');
console.log(s);

Vous pouvez également extraire les parties d'un DateTimeFormat un par un en utilisant DateTimeFormat#format mais notez que si vous utilisez cette méthode, à partir de mars 2020, il n'y aura plus de frais d'administration. 2020, il y a un bug dans l'implémentation ECMAScript lorsqu'il s'agit de des zéros en tête des minutes et des secondes (ce bogue est contourné par l'approche ci-dessus).

let d = new Date(2010, 7, 5);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
console.log(`${da}-${mo}-${ye}`);

Lorsque vous travaillez avec des dates et des heures, il est généralement utile d'utiliser une bibliothèque (ex. moment.js , luxon ) en raison des nombreuses complexités cachées du domaine.

Notez que l'API d'internationalisation ECMAScript, utilisée dans les solutions ci-dessus n'est pas prise en charge dans IE10 ( 0.03% part du marché mondial des navigateurs en février 2020).

2 votes

Ou étendre le Date comme je l'ai fait à stackoverflow.com/questions/3187790/

41 votes

Je comprends. ye est l'année, mo est le mois et da est le jour. Ce qui est o ? Qu'est-ce que a ? Qu'est-ce que m ? Pourriez-vous utiliser des noms de variables appropriés ?

2 votes

En 2021, les documents de momentjs disent nous voudrions décourager l'utilisation de Moment dans les nouveaux projets à l'avenir.

704voto

RobertPitt Points 28140

Utilisez le bibliothèque date.format :

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

retours :

Saturday, June 9th, 2007, 5:46:21 PM 

dateformat sur npm

http://jsfiddle.net/phZr7/1/

0 votes

Son code pour "L" pour cantiseconds est faux, il devrait enlever la partie "L > 99 ?"... A part ça, c'est assez chouette, mais pas trop bien localisable.

9 votes

Cette solution est également disponible sous forme de paquet npm : npmjs.com/package/dateformat

14 votes

Si vous vous donnez la peine d'importer une dépendance externe, je vous recommande d'utiliser moment.js. Il peut faire ce type de formatage de date : momentjs.com/docs/#/affichage Et il a beaucoup plus de fonctionnalités.

588voto

simo Points 1147

Eh bien, ce que je voulais, c'était convertir la date d'aujourd'hui en un MySQL chaîne de date conviviale comme 2012-06-23 et d'utiliser cette chaîne comme paramètre dans une de mes requêtes. La solution simple que j'ai trouvée est la suivante :

var today = new Date().toISOString().slice(0, 10);

Gardez à l'esprit que la solution ci-dessus ne no tenir compte de votre fuseau horaire compensation.

Vous pouvez envisager d'utiliser cette fonction à la place :

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Cela vous donnera la date correcte au cas où vous exécuteriez ce code autour du début/de la fin de la journée.

var date = new Date();

function toLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON();
}

function toJSONLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON().slice(0, 10);
}

// check out your devtools console
console.log(date.toJSON());
console.log(date.toISOString());
console.log(toLocal(date));

console.log(toJSONLocal(date));

18 votes

Vous pouvez faire new Date(date + " UTC") pour tromper le fuseau horaire, et vous pouvez éliminer la ligne setMinutes. Mec, javascript est sale

28 votes

Version compatible Y10K : var today = new Date().toISOString().slice(0,-14) :)

33 votes

Ou comme ceci new Date().toISOString().split('T')[0]

190voto

Dmitry Pavlov Points 2260

Si vous êtes utilisant déjà jQuery UI dans votre projet, vous pourriez le faire de cette façon :

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Des options de format de date sont disponibles pour les afficheurs de date. aquí .

170voto

Sébastien Points 277

Je pense que vous pouvez simplement utiliser le hors normes Méthode de datation toLocaleFormat(formatString)

formatString : Une chaîne de format dans le même format que celui attendu par la fonction strftime() en C.

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

Références :

188 votes

ToLocaleFormat() semble ne fonctionner que dans Firefox. IE et Chrome ne fonctionnent pas dans mon cas.

16 votes

Chrome dispose de la méthode .toLocaleString('en'). Comme il semble que le nouveau navigateur supporte cette méthode developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/

8 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X