Estoy tratando de usar JS para convertir un date object
en una cadena en YYYYMMDD
formato. ¿Hay una manera más fácil que la concatenación Date.getYear()
, Date.getMonth()
y Date.getDay()
?
Estoy tratando de usar JS para convertir un date object
en una cadena en YYYYMMDD
formato. ¿Hay una manera más fácil que la concatenación Date.getYear()
, Date.getMonth()
y Date.getDay()
?
Respuestas:
Pieza de código alterada que uso a menudo:
Date.prototype.yyyymmdd = function() {
var mm = this.getMonth() + 1; // getMonth() is zero-based
var dd = this.getDate();
return [this.getFullYear(),
(mm>9 ? '' : '0') + mm,
(dd>9 ? '' : '0') + dd
].join('');
};
var date = new Date();
date.yyyymmdd();
[1]
con .length===2
, porque un indexador en una cadena no es totalmente compatible. Vea esta respuesta por las razones.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
No me gustó agregar al prototipo. Una alternativa sería:
var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");
<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;
rightNow
variable, puede envolverla new Date
y recuperarla en una sola línea:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, así que hice esto: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Bastante simple, pero debe estar encapsulado.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Puedes usar la toISOString
función:
var today = new Date();
today.toISOString().substring(0, 10);
Le dará un formato "aaaa-mm-dd".
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Si no necesita una solución JS pura, puede usar jQuery UI para hacer el trabajo de esta manera:
$.datepicker.formatDate('yymmdd', new Date());
Por lo general, no me gusta importar demasiadas bibliotecas. Pero jQuery UI es tan útil que probablemente lo usará en otro lugar de su proyecto.
Visite http://api.jqueryui.com/datepicker/ para obtener más ejemplos.
Esta es una sola línea de código que puede usar para crear una YYYY-MM-DD
cadena de la fecha de hoy.
var d = new Date().toISOString().slice(0,10);
toISOString()
dará 2015-12-31T22: 00: 00 GMT +0 (dos horas antes).
new Date('Jun 5 2016').
toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
// => '2016-06-05'
new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
Además de la respuesta de oo, me gustaría recomendar la separación de las operaciones lógicas del retorno y colocarlas como terciarias en las variables.
Además, úselo concat()
para garantizar una concatenación segura de variables
Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear();
var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
return "".concat(yyyy).concat(mm).concat(dd);
};
Date.prototype.yyyymmddhhmm = function() {
var yyyymmdd = this.yyyymmdd();
var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
return "".concat(yyyymmdd).concat(hh).concat(min);
};
Date.prototype.yyyymmddhhmmss = function() {
var yyyymmddhhmm = this.yyyymmddhhmm();
var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
return "".concat(yyyymmddhhmm).concat(ss);
};
var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
yyyymmdd: <span id="a"></span>
</div>
<div>
yyyymmddhhmm: <span id="b"></span>
</div>
<div>
yyyymmddhhmmss: <span id="c"></span>
</div>
("00" + (this.getDate())).slice(-2)
para obtener los números basados en dos dígitos. No hay una declaración "if" o "?:", Y menos llamadas a la función .getX (). Si no es un poco más rápido, al menos es más legible.
No me gusta modificar objetos nativos, y creo que la multiplicación es más clara que la cadena que rellena la solución aceptada.
function yyyymmdd(dateIn) {
var yyyy = dateIn.getFullYear();
var mm = dateIn.getMonth() + 1; // getMonth() is zero-based
var dd = dateIn.getDate();
return String(10000 * yyyy + 100 * mm + dd); // Leading zeros for mm and dd
}
var today = new Date();
console.log(yyyymmdd(today));
.replace('-', '')
para que responda a la pregunta del OP), mientras que usted fue fiel a la pregunta original del OP y no requeriría ese paso adicional. ¡Excelente!
Solución simple JS (ES5) sin posibles problemas de salto de fecha causados por la impresión de Date.toISOString () en UTC:
var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');
Esto en respuesta al comentario de @ weberste sobre la respuesta de @Pierre Guilbert.
toISOString
devolver múltiples guiones sucesivos?
// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509
// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
new Date()
crea un nuevo objeto de fecha que es solo un contenedor alrededor de nr. de ms desde 1970/01/01 00: 00: 00.000 UTC. Luego se toISOString
imprime en la zona horaria local.
Otra forma es usarlo toLocaleDateString
con una configuración regional que tenga un estándar de formato de fecha big endian , como Suecia, Lituania, Hungría, Corea del Sur, ...:
date.toLocaleDateString('se')
Para eliminar los delimitadores ( -
) es solo cuestión de reemplazar los no dígitos:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Esto no tiene el error potencial que puede obtener con los formatos de fecha UTC: la fecha UTC puede ser un día libre en comparación con la fecha en la zona horaria local.
Simplemente puede usar este código de una línea para obtener la fecha en el año
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Versión un poco simplificada para la respuesta más popular en este hilo https://stackoverflow.com/a/3067896/5437379 :
function toYYYYMMDD(d) {
var yyyy = d.getFullYear().toString();
var mm = (d.getMonth() + 101).toString().slice(-2);
var dd = (d.getDate() + 100).toString().slice(-2);
return yyyy + mm + dd;
}
dateformat es un paquete muy usado.
Cómo utilizar:
Descargue e instale dateformat
desde NPM. Requerirlo en su módulo:
const dateFormat = require('dateformat');
y luego simplemente formatea tus cosas:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Este tipo aquí => http://blog.stevenlevithan.com/archives/date-time-format escribió una format()
función para el Date
objeto de Javascript , por lo que se puede usar con formatos literales familiares.
Si necesita un formato de fecha con todas las funciones en el Javascript de su aplicación, úselo. De lo contrario, si lo que desea hacer es una única vez, entonces concatenar getYear (), getMonth (), getDay () probablemente sea lo más fácil.
Trabajando a partir de la respuesta de @ oo, esto le devolverá la cadena de la fecha de acuerdo con una cadena de formato. Puede agregar fácilmente una expresión regular anual de 2 dígitos para el año y milisegundos y tal si los necesita.
Date.prototype.getFromFormat = function(format) {
var yyyy = this.getFullYear().toString();
format = format.replace(/yyyy/g, yyyy)
var mm = (this.getMonth()+1).toString();
format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
var dd = this.getDate().toString();
format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
var hh = this.getHours().toString();
format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
var ii = this.getMinutes().toString();
format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
var ss = this.getSeconds().toString();
format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
return format;
};
d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);
Sin embargo, no sé cuán eficiente es eso, especialmente en lo que respecta al rendimiento porque usa mucha expresión regular. Probablemente podría usar algo de trabajo que no domino js puro.
Parece que mootools proporciona Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Sin embargo, no estoy seguro de si vale la pena incluirlo solo para esta tarea en particular.
Usualmente uso el siguiente código cuando necesito hacer esto.
var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
+ ('0' + (date.getMonth() + 1)).slice(-2)
+ '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written
Para explicar, .slice (-2) nos da los dos últimos caracteres de la cadena.
Entonces, pase lo que pase, podemos agregar "0" al día o mes, y solo pedir los dos últimos, ya que esos son siempre los dos que queremos.
Entonces, si MyDate.getMonth () devuelve 9, será:
("0" + "9") // Giving us "09"
agregando .slice (-2) en eso nos da los dos últimos caracteres que es:
("0" + "9").slice(-2)
"09"
Pero si date.getMonth () devuelve 10, será:
("0" + "10") // Giving us "010"
entonces agregar .slice (-2) nos da los dos últimos caracteres, o:
("0" + "10").slice(-2)
"10"
Si usa AngularJs (hasta 1.5) puede usar el filtro de fecha :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Respondiendo a otro por simplicidad y legibilidad.
Además, no se recomienda editar miembros de clase predefinidos existentes con nuevos métodos:
function getDateInYYYYMMDD() {
let currentDate = new Date();
// year
let yyyy = '' + currentDate.getFullYear();
// month
let mm = ('0' + (currentDate.getMonth() + 1)); // prepend 0 // +1 is because Jan is 0
mm = mm.substr(mm.length - 2); // take last 2 chars
// day
let dd = ('0' + currentDate.getDate()); // prepend 0
dd = dd.substr(dd.length - 2); // take last 2 chars
return yyyy + "" + mm + "" + dd;
}
var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);
¿Qué tal Day.js ?
Solo cuesta 2KB, y tú también puedes dayjs().format('YYYY-MM-DD')
.
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
fecha-shortcode al rescate!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Aquí hay un enfoque más genérico que permite componentes de fecha y hora y se puede clasificar de forma idéntica como número o cadena.
Según el orden numérico del formato de fecha ISO, conviértalo a una zona horaria local y elimine los no dígitos. es decir:
// monkey patch version
Date.prototype.IsoNum = function (n) {
var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}
Uso
var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8)); // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum()); // "20150728150253272"
Javascript nativo:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');