¿Cómo obtengo la fecha actual en JavaScript?

2308

¿Cómo obtengo la fecha actual en JavaScript?

Suresh Chaganti
fuente
383
var currentTime = new Date();
Hendrik, el
11
Consulte la documentación para el objeto Fecha . Tiene ejemplos.
Quentin el
24
new Date()devuelve la hora actual , no la fecha actual . La distinción es importante si está tratando de compararla con otra fecha que no tiene un componente de tiempo (es decir, es a medianoche).
Steve Bennett
11
use momentJs, esta lib es oro para desarrolladores.
RBoschini

Respuestas:

2717

Utilícelo new Date()para generar un nuevo Dateobjeto que contenga la fecha y hora actuales.

var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();

today = mm + '/' + dd + '/' + yyyy;
document.write(today);

Esto le dará la fecha de hoy en el formato de mm / dd / aaaa.

Simplemente cambie today = mm +'/'+ dd +'/'+ yyyy;al formato que desee.

Samuel Meddows
fuente
77
gracias por el código ... pero lo que aún no entiendo es la línea if (dd <10) {dd = '0' + dd} ... ¿por qué <10? por lo que entiendo del código es si el carácter del día es menor que 2, simplemente agregue un 0 anterior al día ... pero ¿por qué 10?
Imin
20
@imin: ya menos de 2 caracteres medios 1 de carácter ... y todo bajo 10 (1 a 9) es 1 carácter, por lo que tendremos 01, 02, ...,09
ZFM
11
@MounaCheikhna - ¿Cómo podríamos estar en el año 999?
nnnnnn
21
Cambia el mes y la fecha si no estás en América del Norte.
Mark Micallef
3
El nuevo Date.prototype.toLocaleDateString()método es una solución más flexible. Es parte de JavaScript desde ECMAScript 5.1 y está bien soportado por los navegadores de hoja perenne. MDN:toLocaleDateString()
Adam Brown
443

var utc = new Date().toJSON().slice(0,10).replace(/-/g,'/');
document.write(utc);

Use la replaceopción si va a reutilizar la utcvariable new Date(utc), como Firefox y Safari no reconocen una fecha con guiones.

Varun Natraaj
fuente
66
No lo creo :) ¡Parece bastante sencillo!
Varun Natraaj
66
toJSON () regresa como utc datetime
Andy N
1
Devuelve una fecha y hora JSON. toUTCString()vuelve como utc datetime.
Varun Natraaj
25
No considera TimezoneOffset. En el momento de la prueba, estaba buscando "ahora" y obtuve "ayer". stackoverflow.com/questions/13646446/…
mickmackusa
77
Perfecto. Esta es la forma más limpia de hacer esto que estoy viendo aquí. Funciona bien en MomentJS para "Hoy, no ahora"moment( new Date().toJSON().slice(0, 10) )
Kyle Hotchkiss
234

¡ACTUALIZADO! , Desplazarse hacia abajo

Si quieres algo simple y bonito para el usuario final ... Also, fixed a small suffix issue in the first version below. Now properly returns suffix.

var objToday = new Date(),
	weekday = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
	dayOfWeek = weekday[objToday.getDay()],
	domEnder = function() { var a = objToday; if (/1/.test(parseInt((a + "").charAt(0)))) return "th"; a = parseInt((a + "").charAt(1)); return 1 == a ? "st" : 2 == a ? "nd" : 3 == a ? "rd" : "th" }(),
	dayOfMonth = today + ( objToday.getDate() < 10) ? '0' + objToday.getDate() + domEnder : objToday.getDate() + domEnder,
	months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
	curMonth = months[objToday.getMonth()],
	curYear = objToday.getFullYear(),
	curHour = objToday.getHours() > 12 ? objToday.getHours() - 12 : (objToday.getHours() < 10 ? "0" + objToday.getHours() : objToday.getHours()),
	curMinute = objToday.getMinutes() < 10 ? "0" + objToday.getMinutes() : objToday.getMinutes(),
	curSeconds = objToday.getSeconds() < 10 ? "0" + objToday.getSeconds() : objToday.getSeconds(),
	curMeridiem = objToday.getHours() > 12 ? "PM" : "AM";
var today = curHour + ":" + curMinute + "." + curSeconds + curMeridiem + " " + dayOfWeek + " " + dayOfMonth + " of " + curMonth + ", " + curYear;

document.getElementsByTagName('h1')[0].textContent = today;
<h1></h1>

ACTUALIZACIÓN DE UBBER Después de muchas dilaciones, finalmente he GitHubbed y actualicé esto con la solución final que he estado usando para mí. ¡Incluso ha tenido algunas ediciones de último minuto para hacerlo más dulce! Si está buscando el viejo jsFiddle, vea esto .

Esta actualización viene en 2 sabores, aún relativamente pequeña, aunque no tan pequeña como mi respuesta original anterior. Si quieres extremadamente pequeño, ve con eso.
También tenga en cuenta: Esto todavía está menos hinchado que moment.js. Si bien moment.js es agradable, en mi opinión, tiene demasiados métodos seculares, que requieren un momento de aprendizaje como si fuera un lenguaje. El mío aquí usa el mismo formato común que PHP: fecha .

enlaces rápidos

Sabor 1new Date().format(String) Mi favorito personal. Conozco el tabú pero funciona muy bien en el objeto Fecha. Solo tenga en cuenta cualquier otra modificación que pueda tener para el Objeto de fecha.

//  use as simple as
new Date().format('m-d-Y h:i:s');   //  07-06-2016 06:38:34

Sabor 2dateFormat(Date, String) Método todo en uno más tradicional. Tiene toda la capacidad de lo anterior, pero se llama a través del método con Date param.

//  use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s');  //  07-06-2016 06:38:34

BONUS Flavor (requiere jQuery)$.date(Date, String) Esto contiene mucho más que una simple formatopción. Extiende el objeto Fecha base e incluye métodos como addDays. Para obtener más información, consulte el Git .

En este mod, los caracteres de formato están inspirados en PHP: fecha . Para obtener una lista completa, consulte mi LÉAME

Este mod también tiene una lista mucho más larga de formatos prefabricados. Para usar un formato prefabricado, simplemente ingrese su nombre clave.dateFormat(new Date(), 'pretty-a');

  • 'compuesto'
    • 'commonLogFormat' == 'd / M / Y: G: i: s'
    • 'exif' == 'Y: m: d G: i: s'
    • 'isoYearWeek' == 'Y \\ WW'
    • 'isoYearWeek2' == 'Y - \\ WW'
    • 'isoYearWeekDay' == 'Y \\ WWj'
    • 'isoYearWeekDay2' == 'Y - \\ WW-j'
    • 'mySQL' == 'Ymd h: i: s'
    • 'postgreSQL' == 'Yz'
    • 'postgreSQL2' == 'Yz'
    • 'soap' == 'Ymd \\ TH: i: su'
    • 'soap2' == 'Ymd \\ TH: i: s.uP'
    • 'unixTimestamp' == '@U'
    • 'xmlrpc' == 'Ymd \\ TG: i: s'
    • 'xmlrpcCompact' == 'Ymd \\ tGis'
    • 'wddx' == 'Ynj \\ TG: i: s'
  • 'constantes'
    • 'AMERICAN' == 'F j Y'
    • 'AMERICANSHORT' == 'm / d / Y'
    • 'AMERICANSHORTWTIME' == 'm / d / Y h: i: sA'
    • 'ATOM' == 'Ymd \\ TH: i: sP'
    • 'COOKIE' == 'l dMY H: i: s T'
    • 'EUROPEAN' == 'j FY'
    • 'EUROPEANSHORT' == 'dmY'
    • 'EUROPEANSHORTWTIME' == 'dmY H: i: s'
    • 'ISO8601' == 'Ymd \\ TH: i: sO'
    • 'LEGAL' == 'j FY'
    • 'RFC822' == 'D d M y H: i: s O'
    • 'RFC850' == 'l dMi H: i: s T'
    • 'RFC1036' == 'D d M y H: i: s O'
    • 'RFC1123' == 'D d MYH: i: s O'
    • 'RFC2822' == 'D d MYH: i: s O'
    • 'RFC3339' == 'Ymd \\ TH: i: sP'
    • 'RSS' == 'D d MYH: i: s O'
    • 'W3C' == 'Ymd \\ TH: i: sP'
  • 'bonita'
    • 'pretty-a' == 'g: i.sA l jS \\ o \\ f FY'
    • 'pretty-b' == 'g: iA l jS \\ o \\ f FY'
    • 'pretty-c' == 'n / d / Y g: iA'
    • 'pretty-d' == 'n / d / Y'
    • 'pretty-e' == 'F jS - g: ia'
    • 'pretty-f' == 'g: iA'

Como puedes notar, puedes usar el doble \para escapar de un personaje.


SpYk3HH
fuente
14
@KamranAhmed Casi 2 años y más de 40 votos más tarde, diría que el esfuerzo valió la pena. LoL. Desde entonces, he ampliado mucho esta clase personalmente, pero no la he subido, ya que pensaba que la mayoría de la gente usaría ese otro complemento de fecha js que veo recomendado, pero creo que debería hacerlo más "público" y agregarlo aquí.
SpYk3HH
14
moment.js es ahora lo que usarías en estos días
Christian Stewart
1
Arriba, hay un error tipográfico (que me tomó un tiempo detectar), utiliza una variable "hoy" en la línea: "dayOfMonth = today +"
user1435707
"today + (objToday.getDate () <10)? '0' + objToday.getDate () + domEnder: objToday.getDate () + domEnder" - JS es un lenguaje estúpido.
Alex S
212

Lo mas corto posible.

Para obtener un formato como "2018-08-03":

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

console.log(today)

Para obtener un formato como "8/3/2018":

let today = new Date().toLocaleDateString()

console.log(today)

Además, puede pasar la configuración regional como argumento, por ejemplo toLocaleDateString("sr"), etc.

Damjan Pavlica
fuente
3
Esto todavía falla debido al cambio de zona horaria.
LStarky
77
¿Por qué no es ésta la respuesta aceptada, más simple y usos construido en funciones
lifesoordinary
171

Si solo desea una fecha sin información de hora, use:

var today = new Date();
    today.setHours(0, 0, 0, 0);

document.write(today);

Mariscal
fuente
40
Esta parece ser la única respuesta que realmente responde la pregunta. Todos los demás responden sobre cómo formatear una fecha como cadena.
Inrego
1
Estoy de acuerdo. En realidad, quería escribir una respuesta similar a esta y luego apareció una pequeña ventana preguntándome si había leído todas las respuestas. Como solo leí las respuestas principales, decidí verificar si hay respuestas correctas y esta fue la primera respuesta correcta.
Lajos Arpad
Esto establece horas usando UTC, que podría no funcionar para todos los casos de uso.
McKay
103

Prueba esto:

var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")

El resultado será como

15/2/2012
Jimmy M
fuente
67

Si está buscando un control mucho más granular sobre los formatos de fecha, le recomiendo consultar momentjs. Excelente biblioteca, y solo 5 KB. http://momentjs.com/

benjamin.keen
fuente
77
Admite la localización como un encanto.
Risadinha
En estos días usamos date-fns: trata las fechas como Inmutables (Moment mutates date), es más rápido y modular (solo importa lo que necesites).
Freewalker
2
Seis años después de publicar este momento, js ha ganado bastante peso. Es posible que desee consultar github.com/iamkun/dayjs en su lugar, me lo han descrito como "momentjs en una dieta". La misma API simple.
benjamin.keen
55

Puede usar moment.js: http://momentjs.com/

var m = moment().format("DD/MM/YYYY");

document.write(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

Morad
fuente
30
El momento es excesivo por solo obtener la fecha actual.
Dan Dascalescu
O moment().format("L")para respetar el entorno local actual.
Dunc
@DanDascalescu En realidad, la especificación base de Javascript para DateTime es tan mala.
Todd
Si ya tiene importados momentjs en su proyecto, esta es la respuesta más simple y limpia.
Adil H. Raza
52

var d = (new Date()).toString().split(' ').splice(1,3).join(' ');

document.write(d)

Para dividirlo en pasos:

  1. (new Date()).toString() da "Vie 28 de junio 2013 15:30:18 GMT-0700 (PDT)"

  2. (new Date()).toString().split(' ') divide la cadena anterior en cada espacio y devuelve una matriz de la siguiente manera: ["Fri", "Jun", "28", "2013", "15:31:14", "GMT-0700", "(PDT)" ]

  3. (new Date()).toString().split(' ').splice(1,3).join(' ') toma los valores segundo, tercero y cuarto de la matriz anterior, los une con espacios y devuelve una cadena "28 de junio de 2013"

Rishabh Marya
fuente
2
Necesitaba un tiempo en 00:00:00 y no quería reconstruirlo manualmente; El paso 2 me lleva a la perfección. ¡Prestigio!
panhandel
3
Puede guardar algunos bytes haciendo esto:Date().split(' ').splice(1,3).join(' ')
hyde
47

Esto funciona cada vez:

    var now = new Date();
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);
    var today = now.getFullYear() + "-" + (month) + "-" + (day);
    
    console.log(today);

roshan
fuente
45
var date = new Date().toLocaleDateString("en-US");

Además, puede llamar al método toLocaleDateStringcon dos parámetros:

var date = new Date().toLocaleDateString("en-US", {
    "year": "numeric",
    "month": "numeric"
});

Artículo sobre MSDN . Más sobre este método en MDN .

Dunaevsky Maxim
fuente
Agradable, funciona en Chrome. Lamentablemente no funciona en PhantomJS a partir del 22/4/2016
Chris
solución genial debería estar en la cima. new Date().toLocaleDateString("de-de")hace el truco para mí
user3772108
29

Versión más simple y limpia:

new Date().toLocaleString();

El resultado varía según la configuración regional del usuario :

2/27/2017, 9:15:41 AM

Oded Breiner
fuente
27

Si está satisfecho con el formato AAAA-MM-DD, esto también hará el trabajo.

new Date().toISOString().split('T')[0]

2018-03-10

Aung Htet
fuente
Como la longitud siempre es fija, también podemos usar la subcadena. nueva Fecha (). toISOString (). substring (0, 10); Podría ser un poco más rápido también.
Mika Karjunen
23

Puede usar la biblioteca Date.js que extiende el objeto Date, por lo tanto, puede tener el método .today ().

eomeroff
fuente
11
si está usando jquery ui con un selector de fechas, puede usar $ .datepicker.formatDate ('aa / mm / dd', nueva fecha ())
Peter Munnings
16

La respuesta de Varun no tiene en cuenta TimezoneOffset . Aquí hay una versión que hace:

var d = new Date()
new Date(d.getTime() - d.getTimezoneOffset() * 60000).toJSON().slice(0, 10) // 2015-08-11

Los TimezoneOffsetminutos son, mientras que el constructor Fecha toma milisegundos, por lo tanto, la multiplicación por 60000.

usuario1338062
fuente
15

La respuesta más corta es: new Date().toJSON().slice(0,10)

Blair Anderson
fuente
Estaba buscando una función de semilla muy simple que cambia regularmente. Esta respuesta es un verdadero placer.
nirazul
11
new Date().toDateString();

Resultado:

"Mié 03 feb 2016"

Isayevskiy_Sergey
fuente
11

Como toISOString()solo devolverá la hora UTC actual, no la hora local. Tenemos que hacer una fecha usando la función '.toString ()' para obtener la fecha en yyyy-MM-ddformato como

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('T')[0]);

Para poner la fecha y la hora en yyyy-MM-ddTHH:mm:ssformato

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0]);

Para poner la fecha y la hora en yyyy-MM-dd HH:mm:ssformato

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0].replace('T',' '));

jafarbtech
fuente
10

Si desea un DD/MM/YYYYformato simple , acabo de encontrar esta solución simple, aunque no prefija los ceros faltantes.

var d = new Date();
document.write( [d.getDate(), d.getMonth()+1, d.getFullYear()].join('/') );

Phil Ricketts
fuente
9
new Date().toISOString().slice(0,10); 

funcionaría también

Toucouleur
fuente
8

ÚLTIMA EDICIÓN: 23/08/19 La biblioteca date-fns funciona de manera muy parecida a moment.js pero tiene una huella mucho menor. Le permite elegir qué funciones desea incluir en su proyecto para que no tenga que compilar toda la biblioteca para formatear la fecha de hoy. Si una lib mínima de terceros no es una opción para su proyecto, apruebo la solución aceptada por Samuel Meddows en la parte superior.

Preservar la historia a continuación porque ayudó a algunas personas. Pero para el registro es bastante hacky y es probable que se rompa sin previo aviso, como lo son la mayoría de las soluciones en esta publicación

EDITAR 2/7/2017 Una solución JS de una línea:

tl; dr

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

edge, ff latest, y chrome return todaysDate = "2/7/2017"
"funciona" * en IE10 +

Explicación

Descubrí que IE10 e IE Edge hacen las cosas un poco diferentes ... imagínense. con new Date(Date.now()).toLocaleString()como entrada,

IE10 devuelve:

"Tuesday, February 07, 2017 2:58:25 PM"

Podría escribir una gran función larga y FTFY. Pero realmente deberías usar moment.js para estas cosas. Mi script simplemente limpia esto y le brinda la notación tradicional expandida de los Estados Unidos:> todaysDate = "March 06, 2017"

IE EDGE devuelve:

"‎2‎/‎7‎/‎2017‎ ‎2‎:‎59‎:‎27‎ ‎PM"

Por supuesto que no podría ser tan fácil. La cadena de fecha de Edge tiene caracteres invisibles "•" entre cada uno visible. Entonces, no solo estaremos verificando si el primer carácter es un número, sino los primeros 3 caracteres, ya que resulta que cualquier carácter individual en todo el rango de fechas eventualmente será un punto o una barra diagonal en algún momento. Para mantener las cosas simples, solo .slice () los primeros tres caracteres (pequeño búfer contra futuras travesuras) y luego verifique los números. Probablemente debería notarse que estos puntos invisibles podrían potencialmente persistir en su código. Tal vez me gustaría profundizar en eso si tienes planes más grandes que simplemente imprimir esta cadena a tu vista.

∴ one-liner actualizado:

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

Eso apesta a leer. Qué tal si:

var dateString = new Date(Date.now()).toLocaleString();
var todaysDate = dateString.slice(0,3).match(/[0-9]/i) ? dateString.split(' ')[0].split(',')[0] : dateString.split(' ')[1] + " " + dateString.split(' ')[2] + " " + dateString.split(' ')[3];

RESPUESTA ORIGINAL

Tengo una frase para ti:

new Date(Date.now()).toLocaleString().split(', ')[0];

y [1]te dará la hora del día.

Cameron Donahue
fuente
7

Puedes usar esto

<script>
function my_curr_date() {      
    var currentDate = new Date()
    var day = currentDate.getDate();
    var month = currentDate.getMonth() + 1;
    var year = currentDate.getFullYear();
    var my_date = month+"-"+day+"-"+year;
    document.getElementById("dateField").value=my_date;    
}
</script>

El HTML es

<body onload='return my_curr_date();'>
    <input type='text' name='dateField' id='dateField' value='' />
</body>
Roger
fuente
6

Si está utilizando jQuery. Prueba este delineador:

$.datepicker.formatDate('dd/mm/yy', new Date());

Aquí está la convención para formatear la fecha

  • d - día del mes (sin cero a la izquierda)
  • dd - día del mes (dos dígitos)
  • o - día del año (sin ceros a la izquierda)
  • oo - día del año (tres dígitos)
  • D - nombre del día corto
  • DD - nombre del día largo
  • m - mes del año (sin cero a la izquierda)
  • mm - mes del año (dos dígitos)
  • M - nombre del mes corto
  • MM - nombre del mes largo
  • y - año (dos dígitos)
  • aa - año (cuatro dígitos)

Aquí está la referencia para jQuery datepicker

Souvik
fuente
5

Una forma directa de lograrlo (teniendo en cuenta su zona horaria actual, aprovechando el formato ISO aaaa-mm-dd) es:

let d = new Date().toISOString().substring(0,19).replace("T"," ") // "2020-02-18 16:41:58"

Por lo general, este es un formato de fecha compatible bastante universal y puede convertirlo a un valor de fecha puro si es necesario:

Date.parse(d); // 1582044297000
Caiuby Freitas
fuente
4

Puedes ver esto

var today = new Date();
today = parseInt(today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear()+"\nTime : "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds();
document.write(today);

Y vea la documentación para el constructor Date (). enlace

Akhil
fuente
4

¿Cuál es el problema con esto? La forma más limpia de hacerlo es

var currentDate=new Date().toLocaleString().slice(0,10);

ISONecroMAn
fuente
1
Devolvería errores, como este 3/4/2018, , mejor usar new Date().toJSON().slice(0,10).
DevonDahon
Esto es perfecto para simplemente obtener una fecha para ver o para obtener información sobre el registro de la consola o para la interfaz de usuario. Mejor para mí sin el.slice(0,10)
Paul Carlton
4

Esto puede ayudarte

var date = new Date();
console.log(date.getDate()+'/'+(date.getMonth()+1)+'/'+date.getFullYear());

Esto imprimirá la fecha actual en formato dd / MM / aaaa

Jayant Patil
fuente
4

Esto es bueno para obtener la fecha formateada

let date = new Date().toLocaleDateString("en", {year:"numeric", day:"2-digit", month:"2-digit"});
console.log(date);

Yugandhar Chaudhari
fuente
3

Creo que esta es una vieja pregunta, pero la forma más fácil sería la siguiente:

var date = new Date();
var TimeStamp = date.toLocaleString();

function CurrentTime(){
  alert(TimeStamp);
}

Esto tomará la hora actual, la pasará a una cadena en función de la ubicación y luego podrá llamar a la función CurrentTime para mostrar la hora. Esta sería, para mí, la forma más efectiva de obtener una marca de tiempo para algo.

Brock Davis
fuente
Esto devolverá datos + tiempo, por ejemplo. '2018-4-6 16:20:22', y la pregunta es cómo obtener solo la fecha.
Vlad Bezden