En utilisant NodeJS, je souhaite formater un Date
dans le format de chaîne suivant:
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
Comment je fais ça?
En utilisant NodeJS, je souhaite formater un Date
dans le format de chaîne suivant:
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
Comment je fais ça?
Réponses:
Si vous utilisez Node.js, vous êtes sûr d'avoir EcmaScript 5, et donc Date a une toISOString
méthode. Vous demandez une légère modification d'ISO8601:
new Date().toISOString()
> '2012-11-04T14:51:06.157Z'
Donc, coupez quelques choses et vous êtes prêt:
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 seule 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 (toujours une bonne chose).
Object has no method 'toISOString'
vous avez raténew
new Date().toISOString().replace('T', ' ').substr(0, 19)
fonctionne très bien.
MISE À JOUR 2017-03-29: Ajout de date-fns, quelques notes sur Moment et Datejs
MISE À JOUR 2016-09-14: Ajout de SugarJS qui semble avoir d'excellentes fonctions date / heure.
OK, puisque personne n'a réellement fourni de réponse, voici la mienne.
Une bibliothèque est certainement le meilleur choix pour gérer les dates et heures de manière standard. Il existe de nombreux cas marginaux dans les calculs de date / heure, il est donc utile de pouvoir transférer le développement à une bibliothèque.
Voici une liste des principales bibliothèques de formatage d'heure compatibles avec les nœuds:
Il existe également des bibliothèques non-Node:
Il y a une bibliothèque pour la conversion:
npm install dateformat
Écrivez ensuite votre exigence:
var dateFormat = require('dateformat');
Liez ensuite la valeur:
var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");
voir dateformat
result.request_date
?
Je n'ai rien contre les bibliothèques en général. Dans ce cas, une bibliothèque à usage général semble exagérée, sauf si d'autres parties du processus de demande datent fortement.
L'écriture de petites fonctions utilitaires comme celle-ci est également un exercice utile pour les programmeurs débutants et confirmés et peut être une expérience d'apprentissage pour les novices parmi 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" */
Manière facilement lisible et personnalisable pour obtenir un horodatage au format souhaité, sans utiliser de bibliothèque:
function timestamp(){
function pad(n) {return n<10 ? "0"+n : n}
d=new Date()
dash="-"
colon=":"
return d.getFullYear()+dash+
pad(d.getMonth()+1)+dash+
pad(d.getDate())+" "+
pad(d.getHours())+colon+
pad(d.getMinutes())+colon+
pad(d.getSeconds())
}
(Si vous avez besoin de temps au format UTC, modifiez simplement les appels de fonction. Par exemple, "getMonth" devient "getUTCMonth")
La bibliothèque javascript sugar.js ( http://sugarjs.com/ ) a des fonctions pour formater les dates
Exemple:
Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}')
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));
Il semble vraiment sale, mais cela devrait fonctionner correctement avec les méthodes de base JavaScript
J'utilise dateformat chez Nodejs et angularjs, donc bon
installer
$ npm install dateformat
$ dateformat --help
démo
var dateFormat = require('dateformat');
var now = new Date();
// Basic usage
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2007, 5:46:21 PM
// You can use one of several named masks
dateFormat(now, "isoDateTime");
// 2007-06-09T17:46:21
// ...Or add your own
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
dateFormat(now, "hammerTime");
// 17:46! Can't touch this!
// You can also provide the date as a string
dateFormat("Jun 9 2007", "fullDate");
// Saturday, June 9, 2007
...
new Date(2015,1,3,15,30).toLocaleString()
//=> 2015-02-03 15:30:00
3.2.2015, 15:30:00
Alternative # 6233 ....
Ajoutez le décalage UTC à l'heure locale puis convertissez-le au format souhaité avec la toLocaleDateString()
méthode de l' Date
objet:
// Using the current date/time
let now_local = new Date();
let now_utc = new Date();
// Adding the UTC offset to create the UTC date/time
now_utc.setMinutes(now_utc.getMinutes() + now_utc.getTimezoneOffset())
// Specify the format you want
let date_format = {};
date_format.year = 'numeric';
date_format.month = 'numeric';
date_format.day = '2-digit';
date_format.hour = 'numeric';
date_format.minute = 'numeric';
date_format.second = 'numeric';
// Printing the date/time in UTC then local format
console.log('Date in UTC: ', now_utc.toLocaleDateString('us-EN', date_format));
console.log('Date in LOC: ', now_local.toLocaleDateString('us-EN', date_format));
Je crée un objet de date par défaut à l'heure locale. J'y ajoute le décalage UTC. Je crée un objet de mise en forme de date. J'affiche la date / heure UTC au format souhaité:
Utilisez le x-date
module qui est l'un des sous-modules de la bibliothèque de classe x ;
require('x-date') ;
//---
new Date().format('yyyy-mm-dd HH:MM:ss')
//'2016-07-17 18:12:37'
new Date().format('ddd , yyyy-mm-dd HH:MM:ss')
// 'Sun , 2016-07-17 18:12:51'
new Date().format('dddd , yyyy-mm-dd HH:MM:ss')
//'Sunday , 2016-07-17 18:12:58'
new Date().format('dddd ddSS of mmm , yy')
// 'Sunday 17thth +0300f Jul , 16'
new Date().format('dddd ddS mmm , yy')
//'Sunday 17th Jul , 16'
new Date().toString("yyyyMMddHHmmss").
replace(/T/, ' ').
replace(/\..+/, '')
avec .toString (), cela devient au format
remplacer (/ T /, ''). // remplace T par '' 2017-01-15T ...
remplacer (/..+/, '') // pour ... 13: 50: 16.1271
exemple, voir var date
et hour
:
var date="2017-01-15T13:50:16.1271".toString("yyyyMMddHHmmss").
replace(/T/, ' ').
replace(/\..+/, '');
var auxCopia=date.split(" ");
date=auxCopia[0];
var hour=auxCopia[1];
console.log(date);
console.log(hour);
.toString("yyyyMMddHHmmss")
?
Pour le formatage de la date, le moyen le plus simple est d'utiliser moment lib. https://momentjs.com/
const moment = require('moment')
const current = moment().utc().format('Y-M-D H:M:S')
toISOString()
ettoUTCString()
J'avais besoin d'une bibliothèque de formatage simple sans les cloches et les sifflets de la prise en charge locale et linguistique. J'ai donc modifié
http://www.mattkruse.com/javascript/date/date.js
et je l'ai utilisé. Voir https://github.com/adgang/atom-time/blob/master/lib/dateformat.js
La documentation est assez claire.
appHelper.validateDates = function (start, end) {
var returnval = false;
var fd = new Date(start);
var fdms = fd.getTime();
var ed = new Date(end);
var edms = ed.getTime();
var cd = new Date();
var cdms = cd.getTime();
if (fdms >= edms) {
returnval = false;
console.log("step 1");
}
else if (cdms >= edms) {
returnval = false;
console.log("step 2");
}
else {
returnval = true;
console.log("step 3");
}
console.log("vall", returnval)
return returnval;
}
Vérifiez le code ci-dessous et le lien vers MDN
// var ts_hms = new Date(UTC);
// ts_hms.format("%Y-%m-%d %H:%M:%S")
// exact format
console.log(new Date().toISOString().replace('T', ' ').substring(0, 19))
// other formats
console.log(new Date().toUTCString())
console.log(new Date().toLocaleString('en-US'))
console.log(new Date().toString())
Je pense que cela répond en fait à votre question.
C'est tellement ennuyeux de travailler avec la date / l'heure en javascript. Après quelques cheveux gris, j'ai compris que c'était en fait assez simple.
var date = new Date();
var year = date.getUTCFullYear();
var month = date.getUTCMonth();
var day = date.getUTCDate();
var hours = date.getUTCHours();
var min = date.getUTCMinutes();
var sec = date.getUTCSeconds();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = ((hours + 11) % 12 + 1);//for 12 hour format
var str = month + "/" + day + "/" + year + " " + hours + ":" + min + ":" + sec + " " + ampm;
var now_utc = Date.UTC(str);