¿Cómo obtengo el mes y la fecha de JavaScript en formato de 2 dígitos?

Respuestas:

812
("0" + this.getDate()).slice(-2)

para la fecha y similares:

("0" + (this.getMonth() + 1)).slice(-2)

por el mes.

Hugo
fuente
86
Genial, pero: function addZ(n){return n<10? '0'+n:''+n;}es un poco más genérico.
RobG
99
el segmento es inteligente, pero es mucho más lento que una simple comparación: jsperf.com/slice-vs-comparison
dak
30
@dak: ¿Y cuándo va a importar eso de manera realista? Dudo que estés calculando el mes miles de veces por segundo.
Sasha Chedygov
2
@ KasperHoldum– getMonthy getDatedevolver números, no cadenas. Y si se requiere compatibilidad con Strings, entonces '0' + Number(n)hará el trabajo.
RobG
99
@Sasha Chedygov seguro que puede calcular el mes miles de veces por segundo, especialmente si está ordenando
Dexygen
87

Si desea un formato como "AAAA-MM-DDTHH: mm: ss", entonces esto podría ser más rápido:

var date = new Date().toISOString().substr(0, 19);
// toISOString() will give you YYYY-MM-DDTHH:mm:ss.sssZ

O el formato de fecha y hora de MySQL comúnmente utilizado "AAAA-MM-DD HH: mm: ss":

var date2 = new Date().toISOString().substr(0, 19).replace('T', ' ');

espero que esto ayude

Qiniso
fuente
1
Esta es la mejor solución que he encontrado. El único problema aquí es el del desplazamiento de la zona horaria.
Praym
3
El desplazamiento de la zona horaria podría solucionarse con algo como: var date = new Date (new Date (). GetTime () - new Date (). GetTimezoneOffset () * 60 * 1000) .toISOString (). Substr (0,19) .replace ('T', '');
Praym
Praym, su código funciona para mí, pero copiar y pegar debe haber tenido algún carácter oculto o algo así que lo escribí a mano.
spacebread
Terminé con esta pregunta tratando de resolver este problema exacto, así que, como resultado, su respuesta es lo que necesitaba.
Engineer Toast
Tenga en cuenta que este método devolverá la fecha y la hora de acuerdo con la zona horaria UTC.
Amr
41

Ejemplo por mes:

function getMonth(date) {
  var month = date.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}  

También puede extender Dateobjetos con dicha función:

Date.prototype.getMonthFormatted = function() {
  var month = this.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}
Sergey Metlov
fuente
44
Tenga en cuenta que getMonth devuelve un número entre 0 y 11, no 1 y 12.
Salman A
44
Esto devuelve resultados inconsistentes. Para noviembre y diciembre devuelve una cadena y para otros meses devuelve un número.
Tim Down
Actualicé el código para implementar Salman Una advertencia de que getMonth está basado en cero en lugar de 1. Y agregué comillas para asegurarme de que siempre se devuelva una cadena.
Jan Derk
23

La mejor manera de hacer esto es crear su propio formateador simple (como se muestra a continuación):

getDate()devuelve el día del mes (del 1 al 31)
getMonth()devuelve el mes (del 0 al 11) < basado en cero, 0 = enero, 11 = diciembre
getFullYear() devuelve el año (cuatro dígitos) < no usargetYear()

function formatDateToString(date){
   // 01, 02, 03, ... 29, 30, 31
   var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
   // 01, 02, 03, ... 10, 11, 12
   var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
   // 1970, 1971, ... 2015, 2016, ...
   var yyyy = date.getFullYear();

   // create the format you want
   return (dd + "-" + MM + "-" + yyyy);
}
Marcel
fuente
20

¿Por qué no usar padStart?

var dt = new Date();

year  = dt.getYear() + 1900;
month = (dt.getMonth() + 1).toString().padStart(2, "0");
day   = dt.getDate().toString().padStart(2, "0");

console.log(year + '/' + month + '/' + day);

Esto siempre devolverá números de 2 dígitos, incluso si el mes o el día es inferior a 10.

Notas:

  • Esto solo funcionará con Internet Explorer si el código js se transpira usando babel .
  • getYear()Regresa el año de 1900 y no requiere padStart.
  • getMonth() devuelve el mes de 0 a 11.
    • 1 se agrega al mes antes del relleno para mantenerlo de 1 a 12
  • getDate() devuelve el día del 1 al 31.
    • el séptimo día volverá 07y, por lo tanto, no necesitamos agregar 1 antes de rellenar la cadena.
SomeGuyOnAComputer
fuente
1
Sip. Está incluido en el enlace de MDN anterior. Si usa babel para transpilar, no debería tener ningún problema.
SomeGuyOnAComputer
10

Lo siguiente se usa para convertir el formato de fecha db2, es decir, AAAA-MM-DD usando el operador ternario

var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : '0' + (currentDate.getMonth()+1);  
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : '0' + (currentDate.getDate());
var createdDateTo = currentDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate; 
alert(createdDateTo);
Gnanasekaran Ebinezar
fuente
7

Yo haría esto:

var d = new Date('January 13, 2000');
var s = d.toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' });
console.log(s); // prints 01/13/2000

Fernando Vezzali
fuente
6
function monthFormated(date) {
   //If date is not passed, get current date
   if(!date)
     date = new Date();

     month = date.getMonth();

    // if month 2 digits (9+1 = 10) don't add 0 in front 
    return month < 9 ? "0" + (month+1) : month+1;
}
ssamuel68
fuente
6

Solo otro ejemplo, casi un revestimiento.

var date = new Date();
console.log( (date.getMonth() < 9 ? '0': '') + (date.getMonth()+1) );

Andrés
fuente
5
function monthFormated() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}
Mohsen
fuente
5

Si me permitiera algo de tiempo, estaba buscando:

YYYYMMDD

por hoy, y me llevé bien con:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');
Loco barney
fuente
2
La respuesta es ordenada. Para DD/MM/YY, fui anew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma
4

Esta fue mi solución:

function leadingZero(value) {
  if (value < 10) {
    return "0" + value.toString();
  }
  return value.toString();
}

var targetDate = new Date();
targetDate.setDate(targetDate.getDate());
var dd = targetDate.getDate();
var mm = targetDate.getMonth() + 1;
var yyyy = targetDate.getFullYear();
var dateCurrent = leadingZero(mm) + "/" + leadingZero(dd) + "/" + yyyy;
Jon
fuente
4

Usando Moment.js se puede hacer así:

moment(new Date(2017, 1, 1)).format('DD') // day
moment(new Date(2017, 1, 1)).format('MM') // month
Aliaksandr Sushkevich
fuente
3

No es una respuesta, pero así es como obtengo el formato de fecha que requiero en una variable

function setDateZero(date){
  return date < 10 ? '0' + date : date;
}

var curr_date = ev.date.getDate();
var curr_month = ev.date.getMonth() + 1;
var curr_year = ev.date.getFullYear();
var thisDate = curr_year+"-"+setDateZero(curr_month)+"-"+setDateZero(curr_date);

¡Espero que esto ayude!

foxybagga
fuente
2

Consejo de MDN :

function date_locale(thisDate, locale) {
  if (locale == undefined)
    locale = 'fr-FR';
  // set your default country above (yes, I'm french !)
  // then the default format is "dd/mm/YYY"

  if (thisDate == undefined) {
    var d = new Date();
  } else {
    var d = new Date(thisDate);
  }
  return d.toLocaleDateString(locale);
}

var thisDate = date_locale();
var dayN = thisDate.slice(0, 2);
var monthN = thisDate.slice(3, 5);
console.log(dayN);
console.log(monthN);

http://jsfiddle.net/v4qcf5x6/

Laurent Belloeil
fuente
2

new Date().getMonth() El método devuelve el mes como un número (0-11)

Puede obtener fácilmente el número de mes correcto con esta función.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}
Mehmet Özkan YAVUZ
fuente
1
function GetDateAndTime(dt) {
  var arr = new Array(dt.getDate(), dt.getMonth(), dt.getFullYear(),dt.getHours(),dt.getMinutes(),dt.getSeconds());

  for(var i=0;i<arr.length;i++) {
    if(arr[i].toString().length == 1) arr[i] = "0" + arr[i];
  }

  return arr[0] + "." + arr[1] + "." + arr[2] + " " + arr[3] + ":" + arr[4] + ":" + arr[5]; 
}
Emrah KAYNAR
fuente
1

Y otra versión aquí https://jsfiddle.net/ivos/zcLxo8oy/1/ , espero sea de utilidad.

var dt = new Date(2016,5,1); // just for the test
var separator = '.';
var strDate = (dt.getFullYear() + separator + (dt.getMonth() + 1) + separator + dt.getDate());
// end of setup

strDate = strDate.replace(/(\b\d{1}\b)/g, "0$1")
i100
fuente
1

Las respuestas aquí fueron útiles, sin embargo, necesito más que eso: no solo mes, fecha, mes, horas y segundos, para un nombre predeterminado.

Curiosamente, aunque el antecedente de "0" era necesario para todo lo anterior, "+ 1" era necesario solo durante un mes, no otros.

Como ejemplo:

("0" + (d.getMonth() + 1)).slice(-2)     // Note: +1 is needed
("0" + (d.getHours())).slice(-2)         // Note: +1 is not needed
Manohar Reddy Poreddy
fuente
0

Mi solución:

function addLeadingChars(string, nrOfChars, leadingChar) {
    string = string + '';
    return Array(Math.max(0, (nrOfChars || 2) - string.length + 1)).join(leadingChar || '0') + string;
}

Uso:

var
    date = new Date(),
    month = addLeadingChars(date.getMonth() + 1),
    day = addLeadingChars(date.getDate());

jsfiddle: http://jsfiddle.net/8xy4Q/1/

usuario3336882
fuente
0
var net = require('net')

function zeroFill(i) {
  return (i < 10 ? '0' : '') + i
}

function now () {
  var d = new Date()
  return d.getFullYear() + '-'
    + zeroFill(d.getMonth() + 1) + '-'
    + zeroFill(d.getDate()) + ' '
    + zeroFill(d.getHours()) + ':'
    + zeroFill(d.getMinutes())
}

var server = net.createServer(function (socket) {
  socket.end(now() + '\n')
})

server.listen(Number(process.argv[2]))
Chí Nguyễn
fuente
0

si desea que la función getDate () devuelva la fecha como 01 en lugar de 1, aquí está el código para ello ... Supongamos que la fecha de hoy es 01-11-2018

var today = new Date();
today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + today.getDate();      
console.log(today);       //Output: 2018-11-1


today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + ((today.getDate() < 10 ? '0' : '') + today.getDate());
console.log(today);        //Output: 2018-11-01
Jayanth G
fuente
0

Quería hacer algo como esto y esto es lo que hice

PD: sé que hay respuestas correctas en la parte superior, pero solo quería agregar algo propio aquí

const todayIs = async () =>{
    const now = new Date();
    var today = now.getFullYear()+'-';
    if(now.getMonth() < 10)
        today += '0'+now.getMonth()+'-';
    else
        today += now.getMonth()+'-';
    if(now.getDay() < 10)
        today += '0'+now.getDay();
    else
        today += now.getDay();
    return today;
}
Mohid Kazi
fuente
demasiado esfuerzo. ¿No es así?
ahmednawazbutt
0

Si marca menos de 10 , no tiene que crear una nueva función para eso. Simplemente asigne una variable entre paréntesis y devuélvala con el operador ternario.

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`
selmansamet
fuente
0
currentDate(){
        var today = new Date();
        var dateTime =  today.getFullYear()+'-'+
                        ((today.getMonth()+1)<10?("0"+(today.getMonth()+1)):(today.getMonth()+1))+'-'+
                        (today.getDate()<10?("0"+today.getDate()):today.getDate())+'T'+
                        (today.getHours()<10?("0"+today.getHours()):today.getHours())+ ":" +
                        (today.getMinutes()<10?("0"+today.getMinutes()):today.getMinutes())+ ":" +
                        (today.getSeconds()<10?("0"+today.getSeconds()):today.getSeconds());        
            return dateTime;
},
Arun Verma
fuente
0

Te sugiero que uses una biblioteca diferente llamada Moment https://momentjs.com/

De esta manera, puede formatear la fecha directamente sin tener que hacer un trabajo adicional

const date = moment().format('YYYY-MM-DD')
// date: '2020-01-04'

Asegúrate de importar el momento también para poder usarlo.

yarn add moment 
# to add the dependency
import moment from 'moment' 
// import this at the top of the file you want to use it in

Espero que esto ayude: D

Sasha Larson
fuente
1
Moment.js ya ha sido sugerido; pero tu consejo sigue siendo completo y útil.
iND
0
$("body").delegate("select[name='package_title']", "change", function() {

    var price = $(this).find(':selected').attr('data-price');
    var dadaday = $(this).find(':selected').attr('data-days');
    var today = new Date();
    var endDate = new Date();
    endDate.setDate(today.getDate()+parseInt(dadaday));
    var day = ("0" + endDate.getDate()).slice(-2)
    var month = ("0" + (endDate.getMonth() + 1)).slice(-2)
    var year = endDate.getFullYear();

    var someFormattedDate = year+'-'+month+'-'+day;

    $('#price_id').val(price);
    $('#date_id').val(someFormattedDate);
});
sbcharya
fuente