En utilisant NodeJS, je souhaite mettre en forme un fichier Date
dans le format de chaîne suivant :
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
Comment faire ?
En utilisant NodeJS, je souhaite mettre en forme un fichier Date
dans le format de chaîne suivant :
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
Comment faire ?
Si vous utilisez Node.js, vous êtes sûr d'avoir EcmaScript 5, et donc Date a une fonction toISOString
méthode. Vous demandez une légère modification de la norme ISO8601 :
new Date().toISOString()
> '2012-11-04T14:51:06.157Z'
Il suffit donc de couper quelques éléments, et le tour est joué :
new Date().toISOString().
replace(/T/, ' '). // replace T with a space
replace(/\..+/, '') // delete the dot and everything after
> '2012-11-04 14:55:45'
Ou, en une ligne : new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')
ISO8601 est nécessairement UTC (également indiqué par le Z de fin sur le premier résultat), vous obtenez donc UTC par défaut (ce qui est toujours une bonne chose).
Une chose à noter est que l'utilisation des expressions régulières de cette manière est lente et que vous n'en avez même pas besoin ici : new Date().toISOString().replace('T', ' ').substr(0, 19)
fonctionne parfaitement.
MISE À JOUR 2021-10-06 : Ajout de Day.js et suppression de l'édition parasite par @ashleedawg
MISE À JOUR 2021-04-07 : Luxon ajouté par @Tampa.
MISE À JOUR 2021-02-28 : Il faut maintenant noter que Moment.js n'est plus activement développé. Il ne disparaîtra pas rapidement car il est intégré dans beaucoup d'autres choses. Le site web propose quelques recommandations pour alternatives et en expliquer les raisons.
MISE À JOUR 2017-03-29 : Ajout de date-fns, quelques notes sur Moment et Datejs.
MISE À JOUR 2016-09-14 : Ajouté SugarJS qui semble avoir d'excellentes fonctions de date/heure.
OK, puisque personne n'a fourni de réponse réelle, voici la mienne.
Une bibliothèque est certainement la meilleure solution pour gérer les dates et les heures de manière standard. Les calculs de date et d'heure comportent de nombreux cas limites et il est donc utile de pouvoir confier le développement à une bibliothèque.
Voici une liste des principaux Nœud compatibles avec les bibliothèques de formatage de l'heure :
Il existe également des non-Nœud bibliothèques :
Les personnes à l'origine de Moment ont mené une expérience appelée Luxon en février 2018. moment.github.io/luxon/index.html
Il existe une bibliothèque pour la conversion :
npm install dateformat
Ensuite, écrivez votre demande :
var dateFormat = require('dateformat');
Puis lier la valeur :
var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");
voir format de données
Je n'ai rien contre les bibliothèques en général. Dans le cas présent, une bibliothèque à usage général semble superflue, à moins que d'autres parties du processus d'application ne soient très datées.
L'écriture de petites fonctions utilitaires comme celle-ci est également un exercice utile pour les programmeurs débutants comme pour les programmeurs chevronnés et peut constituer une expérience d'apprentissage pour les novices d'entre nous.
function dateFormat (date, fstr, utc) {
utc = utc ? 'getUTC' : 'get';
return fstr.replace (/%[YmdHMS]/g, function (m) {
switch (m) {
case '%Y': return date[utc + 'FullYear'] (); // no leading zeros required
case '%m': m = 1 + date[utc + 'Month'] (); break;
case '%d': m = date[utc + 'Date'] (); break;
case '%H': m = date[utc + 'Hours'] (); break;
case '%M': m = date[utc + 'Minutes'] (); break;
case '%S': m = date[utc + 'Seconds'] (); break;
default: return m.slice (1); // unknown code, remove %
}
// add leading zero if required
return ('0' + m).slice (-2);
});
}
/* dateFormat (new Date (), "%Y-%m-%d %H:%M:%S", true) returns
"2012-05-18 05:37:21" */
Bien que cela puisse être utile pour l'apprentissage, je ne suis pas d'accord pour dire que c'est un meilleur résultat que l'utilisation d'une petite bibliothèque bien construite. Une bibliothèque serait entretenue et serait plus susceptible de couvrir les cas limites de la conception qui peuvent ne pas être évidents à première vue, mais qui pourraient facilement se faire sentir à un moment donné - les calculs de date et d'heure sont particulièrement sujets à ces problèmes en raison de leur complexité inhérente.
Non. Il faut absolument utiliser une bibliothèque dans ce cas. Le format peut changer. Même s'il ne change pas, cela ajoute de la complexité au code. Les autres personnes chargées de la maintenance de votre code devront passer du temps à essayer de comprendre cette fonction et à s'assurer qu'elle est correcte. Les exercices sont destinés à l'école ; la question portait sur l'utilisation dans la vie réelle. À moins, bien sûr, qu'il ne s'agisse de votre premier ou deuxième projet "réel" ; dans ce cas, il peut être utile de faire quelque chose comme cela, afin d'apprendre pourquoi vous ne devriez pas le faire à l'avenir.
Utilisez la méthode fournie dans l'objet Date comme suit :
var ts_hms = new Date();
console.log(
ts_hms.getFullYear() + '-' +
("0" + (ts_hms.getMonth() + 1)).slice(-2) + '-' +
("0" + (ts_hms.getDate())).slice(-2) + ' ' +
("0" + ts_hms.getHours()).slice(-2) + ':' +
("0" + ts_hms.getMinutes()).slice(-2) + ':' +
("0" + ts_hms.getSeconds()).slice(-2));
Cela a l'air vraiment sale, mais cela devrait fonctionner correctement avec les méthodes de base de JavaScript
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.
4 votes
C'est un peu ennuyeux de le faire sans bibliothèque. Je recommande d'utiliser datejs
8 votes
Ou momentjs
0 votes
Ou Tempus
0 votes
Tempus a très bien fonctionné. Les problèmes liés à la publicité seront momentanés.
0 votes
Ces commentaires devraient être des réponses ! Peut-être pourriez-vous les déplacer vers les réponses afin que Tampa puisse accepter l'une d'entre elles ?
1 votes
Ni Datejs ni Tempus ne sont des bibliothèques Node (bien qu'elles puissent être utilisées avec Node, vous ne pouvez pas utiliser l'installateur de bibliothèques npm). Comme personne n'a répondu à ces questions, je l'ai fait moi-même.
0 votes
@Tampa : l'une des réponses correspond-elle à vos besoins ? Si c'est le cas, pouvez-vous marquer l'une d'entre elles comme réponse afin que nous n'ayons pas beaucoup de questions ouvertes laissées sur Stack ? Merci beaucoup.
0 votes
Pourquoi ne pas se contenter d'un simple
new Date().toUTCString()
? `0 votes
@JulianKnight-non, ils ne devraient pas l'être. Une réponse ne devrait pas dépendre d'une bibliothèque qui n'est pas demandée. Il existe de très nombreuses bibliothèques de formatage de dates, devrait-il y avoir une réponse pour chacune d'entre elles ?
0 votes
@RobG - En fait, il n'a pas dit dans la question qu'il ne voulait pas de bibliothèque, mais seulement qu'il avait besoin d'une réponse. Mon commentaire (datant d'il y a 4 ans !) visait à encourager les gens à donner une réponse plutôt qu'un commentaire. Vous pouvez voir dans ma réponse que je sais très bien qu'il y en a beaucoup et j'ai attendu une semaine pour voir si quelqu'un d'autre donnerait une réponse. Une telle critique après plus de 4 ans n'est peut-être pas très utile ?