¿Cómo convertir una fecha completa en una fecha corta en javascript?

6 minutos de lectura

avatar de usuario
chobo2

Tengo una cita como este lunes 9 de enero de 2010

Ahora quiero convertirlo a

9/1/2010 dd/mm/aaaa

Traté de hacer esto

    var startDate = "Monday, January 9, 2010";
    var convertedStartDate = new Date(startDate);
    var month = convertedStartDate.getMonth() + 1
    var day = convertedStartDate.getDay();
    var year = convertedStartDate.getFullYear();
    var shortStartDate = month + "https://stackoverflow.com/" + day + "https://stackoverflow.com/" + year;

Sin embargo, debe pensar que la fecha está en un formato diferente ya que el día devuelve 1 en lugar de 9.

Aquí tienes:

(new Date()).toLocaleDateString('en-US');

Eso es todo !!

puedes usarlo en cualquier objeto de fecha

digamos… tienes un objeto llamado “fechaactual”

var currentDate = new Date(); //use your date here
currentDate.toLocaleDateString('en-US'); // "en-US" gives date in US Format - mm/dd/yy

(o)

Si lo quieres en formato local entonces

currentDate.toLocaleDateString(); // gives date in local Format

  • evite usar toLocaleDateString en IE 11.

    –Charlie Ng

    8 de febrero de 2018 a las 21:11

  • @CharlieNg ¿cómo es que? De un vistazo, parece que funciona para mí en IE 11.

    – cs_pupil

    30 de enero de 2019 a las 23:42


  • Problemas de IE 11: stackoverflow.com/questions/21413757/…

    – cs_pupil

    31 de enero de 2019 a las 0:04


  • Ok, si alguna vez me teletransporto al pasado, no usaré toLocaleDateString en IE 11

    – Connor

    2 de julio de 2019 a las 17:19

  • Una cosa a tener en cuenta son las compensaciones de conversión de tiempo, que pueden generar resultados inesperados, por ejemplo: new Date('2021-09-09').toLocaleDateString('en-US'); // returns "9/8/2021"

    – thdoan

    2 sep 2021 a las 0:21

avatar de usuario
Roland Bouman

los getDay() El método devuelve un número para indicar el día de la semana (0=domingo, 1=lunes, … 6=sábado). Usar getDate() para devolver un número para el día del mes:

var day = convertedStartDate.getDate();

Si lo desea, puede intentar agregar una función de formato personalizado al prototipo del Date objeto:

Date.prototype.formatMMDDYYYY = function(){
    return (this.getMonth() + 1) + 
    "https://stackoverflow.com/" +  this.getDate() +
    "https://stackoverflow.com/" +  this.getFullYear();
}

Después de hacer esto, puede llamar formatMMDDYYY() en ningún instancia de la Date objeto. Por supuesto, este es solo un ejemplo muy específico, y si realmente lo necesita, puede escribir una función de formato genérica que haría esto en función de una cadena de formato, algo así como SimpleDateeFormat de Java (http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html)

(tangente: la Date el objeto siempre me confunde… getYear() contra getFullYear(), getDate() contra getDay(), getDate() varía de 1..31, pero getMonth() de 0..11

Es un desastre, y siempre necesito echar un vistazo. http://www.w3schools.com/jsref/jsref_obj_date.asp)

  • Genial eso funcionó. Pero, ¿cómo puedo configurarlo para que siempre haga mm/dd/yyyy ya que siempre quiero esto en ese formato de fecha sin importar lo que establezca el cliente? Como sé, lo estoy imprimiendo en el formato que quiero, pero no estoy seguro de cómo reaccionaría a la conversión si intentara ponerlo en el formato del cliente.

    – chobo2

    10 de enero de 2010 a las 1:28


  • Todavía no estoy seguro de si debo preocuparme por otros formatos de fecha. Tal vez tengo que publicar una nueva pregunta.

    – chobo2

    10 de enero de 2010 a las 1:40

  • Date es solo una clase para representar valores de fecha/hora. Tiene una serie de métodos que devuelven una representación de cadena, pero el formato deseado simplemente no está allí. El formato que creaste no es un Date objeto: es una cadena, la acabas de crear con datos que salen del Date objeto. Puede intentar agregar su propio método de formato al prototipo del Date objeto. Editaré mi respuesta para mostrar cómo.

    – Roland Bouman

    10 de enero de 2010 a las 1:44

  • @Cory Mawhorter “No lo olvides”: no lo hice. Escribí: “pero getMonth() de 0..11”. Tal vez no deberías olvidarte de leer antes de comentar. “¡No vincular a w3schools!” < ¿por qué no? Explican muy bien estos puntos.

    – Roland Bouman

    10 de julio de 2012 a las 0:40

  • Tenga en cuenta que querrá hacer return (this.getMonth() + 1) + "/" + this.getDate() + "/" + this.getFullYear(); si desea que el mes sea correcto (ya que, como mencionó Roland, getMonth() devuelve 0..11)

    – snumpy

    13 de junio de 2013 a las 15:04

avatar de usuario
Constantino

Incorporado toLocaleDateString() hace el trabajo, pero eliminará los 0 iniciales para el día y el mes, por lo que obtendremos algo como “1/9/1970”, que no es perfecto en mi opinión. Para obtener un formato adecuado MM/DD/YYYY podemos usar algo como:

new Date(dateString).toLocaleDateString('en-US', {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
})

Alternativa: Podemos obtener un comportamiento similar usando Intl.DateTimeFormat que tiene decente compatibilidad con navegador. Similar a toLocaleDateString()podemos pasar un objeto con opciones:

const date = new Date('Dec 2, 2021') // Thu Dec 16 2021 15:49:39 GMT-0600
const options = {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
}
new Intl.DateTimeFormat('en-US', options).format(date) // '12/02/2021'

  • Funciona perfecto! Gracias por compartir.

    – Desarrollador

    23 de febrero de 2020 a las 3:16

  • No estoy seguro de por qué recibo votos negativos, ya que esta es una funcionalidad integrada en JS. No entiendo por qué alguien preferiría usar bibliotecas externas en lugar de funciones integradas.

    – Constantino

    29 de abril de 2020 a las 20:59

  • Estoy contigo en esto.

    – Desarrollador

    11 mayo 2020 a las 17:40

  • ¿Cómo puede usar la cadena de fecha y hora local con esas opciones? ¿No hay una sobrecarga solo para opciones y también los parámetros con nombre no parecen funcionar?

    – scottdavidwalker

    6 de enero de 2021 a las 13:49

  • la sintaxis es dateObj.toLocaleDateString([locales[, options]]). Puedes encontrar todas las opciones aquí: desarrollador.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Constantino

    7 de enero de 2021 a las 6:27

avatar de usuario
Abilash Raghu

var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)"); 
document.getElementById("demo").innerHTML = d.toLocaleDateString();

date.toLocaleDateString('en-US') Funciona genial. Aquí hay más información al respecto: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

avatar de usuario
Metvsk

Quería que la fecha se mostrara en el campo type=”time”.

La conversión normal omite los ceros y el campo del formulario no muestra el valor y muestra un error en la consola que indica que el formato debe ser aaaa-mm-dd.

Por lo tanto, agregué una pequeña declaración (verificar)? (verdadero): (falso) de la siguiente manera:

makeShortDate=(date)=>{
yy=date.getFullYear()
mm=date.getMonth()
dd=date.getDate()
shortDate=`${yy}-${(mm<10)?0:''}${mm+1}-${(dd<10)?0:''}${dd}`;
return shortDate;
}

avatar de usuario
a.boussema

Pude hacer eso con:

var dateTest = new Date("04/04/2013");
dateTest.toLocaleString().substring(0,dateTest.toLocaleString().indexOf(' '))

el 04/04/2013 es solo para probar, reemplácelo con su objeto de fecha.

  • Esto fue Bueno para una solución rápida y sucia, siempre me encantaron las líneas: ¡Para la fecha actual! (nueva Fecha()).toLocaleString().substring(0,(nueva Fecha()).toLocaleString().indexOf(‘ ‘))

    – JDuarteDJ

    17 de diciembre de 2015 a las 14:13


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad