¿Cómo le doy formato a una fecha en JavaScript?

Resuelto leora asked hace 14 años • 70 respuestas

¿Cómo formato un Dateobjeto Javascript como una cadena? (Preferiblemente en el formato: 10-Aug-2010)

leora avatar Aug 24 '10 06:08 leora
Aceptado

Si necesita un control ligeramente menor sobre el formato que la respuesta actualmente aceptada, Date#toLocaleDateStringpuede utilizarlo para crear representaciones estándar específicas de la configuración regional. Los argumentos localey optionspermiten que las aplicaciones especifiquen el idioma cuyas convenciones de formato deben usarse y permiten cierta personalización de la representación.

Ejemplos clave de opciones:

  1. día:
    La representación del día.
    Los valores posibles son "numéricos", "2 dígitos".
  2. día laborable:
    La representación del día laborable.
    Los valores posibles son "estrecho", "corto", "largo".
  3. año:
    La representación del año.
    Los valores posibles son "numéricos", "2 dígitos".
  4. mes:
    La representación del mes.
    Los valores posibles son "numérico", "2 dígitos", "estrecho", "corto", "largo".
  5. hora:
    La representación de la hora.
    Los valores posibles son "numéricos", "2 dígitos".
  6. minuto: La representación del minuto.
    Los valores posibles son "numéricos", "2 dígitos".
  7. segundo:
    La representación del segundo.
    Los valores posibles son "numéricos", de 2 dígitos".
  8. hora12:
    La representación del formato de hora.
    Acepta booleano verdadero o falso

Todas estas claves son opcionales. Puede cambiar la cantidad de valores de opciones según sus requisitos, y esto también reflejará la presencia de cada término de fecha y hora.

Nota: Si solo desea configurar las opciones de contenido, pero aún usar la configuración regional actual, pasar nullel primer parámetro provocará un error. Úselo undefineden su lugar.

Para diferentes idiomas:

  1. "en-US": para inglés americano
  2. "en-GB": para inglés británico
  3. "hola-IN": para hindi
  4. "ja-JP": para japonés

Puede utilizar más opciones de idioma.

Por ejemplo

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016
Expandir fragmento

También puedes utilizar el toLocaleString()método para el mismo propósito. La única diferencia es que esta función proporciona el momento en el que no pasas ninguna opción.

// Example
9/17/2016, 1:21:34 PM

Referencias:

  • toLocaleString()

  • toLocaleDateString()

ajeet kanojia avatar Dec 01 '2015 08:12 ajeet kanojia

Para formatos de fecha delimitados personalizados, debe extraer los componentes de fecha (u hora) de un DateTimeFormatobjeto (que forma parte de la API de internacionalización de ECMAScript ) y luego crear manualmente una cadena con los delimitadores que desee.

Para hacer esto, puedes usar DateTimeFormat#formatToParts. Podrías desestructurar la matriz, pero eso no es lo ideal, ya que la salida de la matriz depende de la configuración regional:

{ // example 1
   let formatter = new Intl.DateTimeFormat('en');
   let example = formatter.formatToParts();
   console.log(example);
}
{ // example 2
   let formatter = new Intl.DateTimeFormat('hi');
   let example = formatter.formatToParts();
   console.log(example);
}
Expandir fragmento

Mejor sería asignar una matriz de formato a las cadenas resultantes:

function join(date, options, separator) {
   function format(option) {
      let formatter = new Intl.DateTimeFormat('en', option);
      return formatter.format(date);
   }
   return options.map(format).join(separator);
}

let options = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let joined = join(new Date, options, '-');
console.log(joined);
Expandir fragmento

También puede extraer las partes de una DateTimeFormatpor una usando DateTimeFormat#format, pero tenga en cuenta que al usar este método, a partir de marzo de 2020, hay un error en la implementación de ECMAScript cuando se trata de ceros a la izquierda en minutos y segundos (este error se evita mediante el enfoque anterior).

let date = new Date(2010, 7, 5);
let year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date);
let month = new Intl.DateTimeFormat('en', { month: 'short' }).format(date);
let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
console.log(`${day}-${month}-${year}`);
Expandir fragmento

Cuando se trabaja con fechas y horas, normalmente vale la pena utilizar una biblioteca (por ejemplo, luxon , date-fns ,momento.jsno se recomienda para proyectos nuevos ) debido a las muchas complejidades ocultas del campo.

Tenga en cuenta que la API de internacionalización de ECMAScript, utilizada en las soluciones anteriores, no es compatible con IE10 ( 0,03% de participación de mercado global de navegadores en febrero de 2020).

Marko avatar Aug 23 '2010 23:08 Marko

Si necesita formatear rápidamente su fecha usando JavaScript simple, use getDate, getMonth + 1, y :getFullYeargetHoursgetMinutes

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

O, si necesita que se complete con ceros:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50
sebastian.i avatar May 16 '2015 07:05 sebastian.i

Utilice la biblioteca date.format :

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

devoluciones:

Saturday, June 9th, 2007, 5:46:21 PM 

formato de fecha en npm

http://jsfiddle.net/phZr7/1/

RobertPitt avatar Aug 23 '2010 23:08 RobertPitt

Bueno, lo que quería era convertir la fecha de hoy en una cadena de fecha compatible con MySQL como 2012-06-23y usar esa cadena como parámetro en una de mis consultas. La solución simple que he encontrado es esta:

var today = new Date().toISOString().slice(0, 10);

Tenga en cuenta que la solución anterior no tiene en cuenta el desplazamiento de su zona horaria .

Podrías considerar usar esta función en su lugar:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Esto le dará la fecha correcta en caso de que esté ejecutando este código alrededor del inicio o final del día.

var date = new Date();

function toLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON();
}

function toJSONLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON().slice(0, 10);
}

// check out your devtools console
console.log(date.toJSON());
console.log(date.toISOString());
console.log(toLocal(date));

console.log(toJSONLocal(date));
Expandir fragmento

  • Fecha.toISOString
  • Fecha.toJSON
  • cadena.rebanada
  • Ejemplo externo
simo avatar Jun 23 '2012 18:06 simo