JavaScript Formato de una fecha de JavaScript


Ejemplo

Formato de una fecha de JavaScript en los navegadores modernos

En los navegadores modernos (*), Date.prototype.toLocaleDateString() permite definir el formato de una Date de una manera conveniente.

Requiere el siguiente formato:

dateObj.toLocaleDateString([locales [, options]])

El parámetro locales debe ser una cadena con una etiqueta de idioma BCP 47, o una matriz de dichas cadenas.

El parámetro de options debe ser un objeto con algunas o todas las siguientes propiedades:

  • localeMatcher : los valores posibles son "lookup" y "best fit" ; el valor predeterminado es "best fit"
  • zona horaria : el único valor que deben reconocer las implementaciones es "UTC" ; el valor predeterminado es la zona horaria predeterminada del tiempo de ejecución
  • hora12 : los valores posibles son true y false ; el valor predeterminado es dependiente de la configuración regional
  • formatMatcher : los valores posibles son "basic" y "best fit" ; el valor predeterminado es "best fit"
  • día de la semana : los valores posibles son "narrow" , "short" y "long"
  • era : los valores posibles son "narrow" , "short" y "long"
  • año : los valores posibles son "numeric" y "2-digit"
  • mes : los valores posibles son "numeric" , "2-digit" , "narrow" , "short" y "long"
  • día : los valores posibles son "numeric" y "2-digit"
  • hora : los valores posibles son "numeric" y "2-digit"
  • minuto : los valores posibles son "numeric" y "2-digit"
  • segundo : los valores posibles son "numeric" y "2-digit"
  • timeZoneName : los valores posibles son "short" y "long"

Cómo utilizar

var today = new Date().toLocaleDateString('en-GB', {  
    day : 'numeric',
    month : 'short',
    year : 'numeric'
});

Salida si se ejecuta el 24 de enero de 2036:

'24 Jan 2036'

Yendo personalizado

Si Date.prototype.toLocaleDateString() no es lo suficientemente flexible como para satisfacer cualquier necesidad que pueda tener, es posible que desee crear un objeto Date personalizado que tenga este aspecto:

var DateObject = (function() {
    var monthNames = [
      "January", "February", "March",
      "April", "May", "June", "July",
      "August", "September", "October",
      "November", "December"
    ];
    var date = function(str) {
        this.set(str);
    };
    date.prototype = {
        set : function(str) {
            var dateDef = str ? new Date(str) : new Date();
            this.day = dateDef.getDate();
            this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
            this.month = dateDef.getMonth() + 1;
            this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
            this.monthName = monthNames[this.month - 1];
            this.year = dateDef.getFullYear();
        },
        get : function(properties, separator) {
            var separator = separator ? separator : '-'
                ret = [];
            for(var i in properties) {
                ret.push(this[properties[i]]);
            }
            return ret.join(separator);
        }
    };
    return date;
})();

Si incluyó ese código y ejecutó un new DateObject() el 20 de enero de 2019, produciría un objeto con las siguientes propiedades:

day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019

Para obtener una cadena con formato, podrías hacer algo como esto:

new DateObject().get(['dayPadded', 'monthPadded', 'year']);

Eso produciría el siguiente resultado:

20-01-2016

(*) Según la MDN , "navegadores modernos" significa Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ y Safari todas las noches.