toisostring - short date javascript
Node.js: cómo formatear una cadena de fecha en UTC (12)
ACTUALIZACIÓN 2017-03-29: Fecha-fns añadidas, algunas notas en Moment y Datejs
ACTUALIZACIÓN 2016-09-14: Se agregó SugarJS, que parece tener algunas excelentes funciones de fecha / hora.
Está bien, ya que nadie ha proporcionado una respuesta real, aquí está el mío.
Una biblioteca es sin duda la mejor apuesta para manejar fechas y horas de forma estándar. Hay muchos casos límite en los cálculos de fecha / hora, por lo que es útil poder transferir el desarrollo a una biblioteca.
Aquí hay una lista de las principales bibliotecas de formato de tiempo compatibles con Nodo:
- momentjs [ gracias a Mustafa ] "Una biblioteca de fechas de javascript liviana (4.3k) para analizar, manipular y formatear fechas" - Incluye internacionalización, cálculos y formatos relativos de fecha - Actualización 2017-03-29 : No es tan liviano más, pero sigue siendo la solución más completa, especialmente si necesita soporte de zona horaria.
- date-fns [ agregado 2017-03-29, gracias a Fractalf ] Pequeño, rápido, funciona con objetos de fecha estándar JS. Gran alternativa al momento si no necesitas soporte de zona horaria.
- SugarJS : una biblioteca auxiliar general que agrega funciones muy necesarias a los tipos de objetos incorporados de JavaScripts. Incluye algunas capacidades de fecha y hora excelentes.
- strftime - Justo lo que dice, agradable y simple
- dateutil : este es el que solía usar antes de MomentJS
- node-formatdate
- TimeTraveller : "Time Traveler ofrece un conjunto de métodos de utilidad para manejar las fechas. Desde agregar y quitar, hasta formatear. Time Traveler solo extiende los objetos de fecha que crea, sin contaminar el espacio de nombres global".
- Tempus [gracias a Dan D] - ACTUALIZACIÓN: esto también se puede utilizar con Node y se implementa con npm, ver los documentos
También hay bibliotecas que no son Node:
- datejs [gracias a Peter Olson] - no empaquetado en npm o GitHub por lo que no es tan fácil de usar con Node - ¡realmente no recomendado como no actualizado desde 2007!
Usando Node.js, quiero formatear una Date
en el siguiente formato de cadena:
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
¿Cómo puedo hacer eso?
Forma fácil de leer y personalizable para obtener una marca de tiempo en el formato deseado, sin el uso de ninguna biblioteca:
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 necesita tiempo en formato UTC, simplemente cambie las llamadas a funciones. Por ejemplo, "getMonth" se convierte en "getUTCMonth")
Hay una biblioteca para la conversión:
npm install dateformat
Luego escribe tu requerimiento:
var dateFormat = require(''dateformat'');
A continuación, vincula el valor:
var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");
ver dateformat
La biblioteca javascript sugar.js ( http://sugarjs.com/ ) tiene funciones para formatear fechas
Ejemplo:
Date.create().format(''{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}'')
Necesitaba una biblioteca de formato simple sin las características del soporte de idioma e idioma. Entonces modifiqué
http://www.mattkruse.com/javascript/date/date.js
y lo usó Ver https://github.com/adgang/atom-time/blob/master/lib/dateformat.js
La documentación es bastante clara.
No tengo nada en contra de las bibliotecas en general. En este caso, una biblioteca de propósito general parece exagerada, a menos que otras partes del proceso de solicitud tengan mucha fecha.
Escribir funciones de utilidad pequeñas como esta también es un ejercicio útil tanto para principiantes como para programadores consumados y puede ser una experiencia de aprendizaje para los principiantes entre nosotros.
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" */
Puede usar uno de los muchos módulos disponibles para formatear las fechas. @ Julian-Knight dio una lista bastante buena en su respuesta.
Además, otra gran manera de lograr lo que está buscando es utilizar el método provisto en el objeto Date de la siguiente manera:
var ts_hms = new Date(UTC);
console.log(
ts_hms.getFullYear() + ''-'' +
("0" + (ts_hms.getMonth() + 1)).slice(-2) + ''-'' +
("0" + (ts_hms.getDate() + 1)).slice(-2) + '' '' +
("0" + ts_hms.getHours()).slice(-2) + '':'' +
("0" + ts_hms.getMinutes()).slice(-2) + '':'' +
("0" + ts_hms.getSeconds()).slice(-2));
Se ve muy sucio, pero debería funcionar bien con los métodos básicos de JavaScript :)
Si está utilizando Node.js, está seguro de tener EcmaScript 5, por lo que Date tiene un método toISOString
. Está solicitando una ligera modificación de ISO8601:
new Date().toISOString()
> ''2012-11-04T14:51:06.157Z''
Así que solo corta algunas cosas, y estás listo:
new Date().toISOString().
replace(/T/, '' ''). // replace T with a space
replace(//..+/, '''') // delete the dot and everything after
> ''2012-11-04 14:55:45''
O, en una línea: new Date().toISOString().replace(/T/, '' '').replace(//..+/, '''')
ISO8601 es necesariamente UTC (también indicado por la Z final en el primer resultado), por lo que obtiene UTC por defecto (siempre es algo bueno).
Use el módulo x-date
que es uno de los submódulos de la biblioteca x-class ;
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''
Creo que esto en realidad responde tu pregunta.
Es tan molesto trabajar con fecha / hora en javascript. Después de algunos cabellos grises, descubrí que en realidad era bastante 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);
new Date().toString("yyyyMMddHHmmss").
replace(/T/, '' '').
replace(//..+/, '''')
con .toString (), esto se convierte en formato
reemplazar (/ T /, ''''). // reemplazar T a '''' 2017-01-15T ...
reemplace (/..+/, '''') // por ... 13: 50: 16.1271
ejemplo, ver var date
y 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);
new Date(2015,1,3,15,30).toLocaleString()
//=> 2015-02-03 15:30:00