Javascript adiciona zeros à esquerda até a data

Eu criei este script para calcular a data com 10 dias de antecedência no formato dd / mm / aaaa:

var MyDate = new Date(); var MyDateString = new Date(); MyDate.setDate(MyDate.getDate()+10); MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear(); 

Eu preciso que a data apareça com zeros à esquerda no componente dia e mês, adicionando essas regras ao script. Eu não consigo fazer isso funcionar.

 if (MyDate.getMonth < 10)getMonth = '0' + getMonth; 

e

 if (MyDate.getDate <10)get.Date = '0' + getDate; 

Se alguém pudesse me mostrar onde inseri-las no script, eu ficaria muito grato.

    Tente isto: http://jsfiddle.net/xA5B7/

     var MyDate = new Date(); var MyDateString; MyDate.setDate(MyDate.getDate() + 20); MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/' + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/' + MyDate.getFullYear(); 

    EDITAR:

    Para explicar, o .slice(-2) nos fornece os dois últimos caracteres da string.

    Portanto, não importa o que, podemos adicionar "0" ao dia ou mês, e apenas pedir os dois últimos, pois esses são sempre os dois que queremos.

    Então, se o MyDate.getMonth() retornar 9 , será:

     ("0" + "9") // Giving us "09" 

    so adicionando .slice(-2) em que nos dá os dois últimos caracteres que é:

     ("0" + "9").slice(-2) "09" 

    Mas se MyDate.getMonth() retornar 10 , será:

     ("0" + "10") // Giving us "010" 

    então adicionar .slice(-2) nos dá os dois últimos caracteres, ou:

     ("0" + "10").slice(-2) "10" 

    Aqui está um exemplo dos documentos do object Date na Mozilla Developer Network usando uma function “pad” personalizada, sem ter que estender o protótipo Number do Javascript. A function útil que eles dão como exemplo é

     function pad(n){return n<10 ? '0'+n : n} 

    E abaixo está sendo usado no contexto.

     /* use a function for the exact format desired... */ function ISODateString(d){ function pad(n){return n<10 ? '0'+n : n} return d.getUTCFullYear()+'-' + pad(d.getUTCMonth()+1)+'-' + pad(d.getUTCDate())+'T' + pad(d.getUTCHours())+':' + pad(d.getUTCMinutes())+':' + pad(d.getUTCSeconds())+'Z' } var d = new Date(); console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z 

    Você pode definir uma function “str_pad” (como em php):

     function str_pad(n) { return String("00" + n).slice(-2); } 
     Number.prototype.padZero= function(len){ var s= String(this), c= '0'; len= len || 2; while(s.length < len) s= c + s; return s; } 

    //em uso:

     (function(){ var myDate= new Date(), myDateString; myDate.setDate(myDate.getDate()+10); myDateString= [myDate.getDate().padZero(), (myDate.getMonth()+1).padZero(), myDate.getFullYear()].join('/'); alert(myDateString); })() /* value: (String) 09/09/2010 */ 
     var MyDate = new Date(); var MyDateString = ''; MyDate.setDate(MyDate.getDate()); var tempoMonth = (MyDate.getMonth()+1); var tempoDate = (MyDate.getDate()); if (tempoMonth < 10) tempoMonth = '0' + tempoMonth; if (tempoDate < 10) tempoDate = '0' + tempoDate; MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear(); 

    Se você quiser localizar a saída da data por idioma e precisar de zeros à esquerda, a solução será diferente:

     var date = new Date(2018, 2, 1); var result = date.toLocaleDateString("de-DE", { year: "numeric", month: "2-digit", day: "2-digit", }); console.log(result); 

    Para você pessoas do futuro (ECMAScript 2017 e além)

    Solução

     "use strict" const today = new Date() const year = today.getFullYear() const month = `${today.getMonth() + 1}`.padStart(2, 0) const day = `${today.getDate()}`.padStart(2, 0) const stringDate = [day, month, year].join("/") // 13/12/2017 

    Explicação

    o String.prototype.padStart(targetLength[, padString]) adiciona o máximo possível de padString no destino String.prototype para que o novo comprimento do destino seja targetLength .

    Exemplo

     "use strict" let month = "9" month = month.padStart(2, 0) // "09" let byte = "00000100" byte = byte.padStart(8, 0) // "00000100" 
     function formatDate(jsDate){ // add leading zeroes to jsDate when days or months are < 10.. // ie // formatDate(new Date("1/3/2013")); // returns // "01/03/2103" //////////////////// return (jsDate.getDate()<10?("0"+jsDate.getDate()):jsDate.getDate()) + "/" + ((jsDate.getMonth()+1)<10?("0"+(jsDate.getMonth()+1)):(jsDate.getMonth()+1)) + "/" + jsDate.getFullYear(); } 

    Você poderia usar o operador ternário para formatar a data como uma instrução “if”.

    Por exemplo:

     var MyDate = new Date(); MyDate.setDate(MyDate.getDate()+10); var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear(); 

    assim

     (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) 

    seria semelhante a uma instrução if, em que se o método getDate () retornar um valor menor que 10, retornará um '0' + a Data, ou então retornará a data se for maior que 10 (já que não precisamos adicionar o valor inicial 0) O mesmo para o mês.

    Edit: Esqueceu que getMonth começa com 0, então adicionou o +1 para contabilizá-lo. É claro que você também poderia apenas dizer d.getMonth () <9:, mas imaginei que usar o +1 ajudaria a tornar mais fácil a compreensão.

    Eu envolvi a resposta correta desta pergunta em uma function que pode adicionar vários zeros à esquerda, mas o padrão é adicionar 1 zero.

     function zeroFill(nr, depth){ depth = (depth === undefined)? 1 : depth; var zero = "0"; for (var i = 0; i < depth; ++i) { zero += "0"; } return (zero + nr).slice(-(depth + 1)); } 

    para trabalhar apenas com números e não mais de 2 dígitos, também é uma abordagem:

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

    Facilite sua vida e use o Moment.js algum código de exemplo:

     var beginDateTime = moment() .format('DD-MM-YYYY HH:mm') .toString(); // Now will print 30-06-2015 17:55 console.log(beginDateTime); 

    Eu encontrei o caminho mais curto para fazer isso:

      MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2'); 

    irá adicionar zeros à esquerda para todos os dígitos solitários

    O objective a seguir é extrair a configuração, conectar-se ao Date.protoype e aplicar a configuração.

    Eu usei uma Array para armazenar blocos de tempo e quando eu push() this como um object de Date , ele me retorna o comprimento para iterar. Quando termino, posso usar join no valor de return .

    Isso parece funcionar bem rápido: 0.016ms

     // Date protoype Date.prototype.formatTime = function (options) { var i = 0, time = [], len = time.push(this.getHours(), this.getMinutes(), this.getSeconds()); for (; i < len; i += 1) { var tick = time[i]; time[i] = tick < 10 ? options.pad + tick : tick; } return time.join(options.separator); }; // Setup output var cfg = { fieldClock: "#fieldClock", options: { pad: "0", separator: ":", tick: 1000 } }; // Define functionality function startTime() { var clock = $(cfg.fieldClock), now = new Date().formatTime(cfg.options); clock.val(now); setTimeout(startTime, cfg.options.tick); } // Run once startTime(); 

    demo: http://jsfiddle.net/tive/U4MZ3/

    O que eu faria, é criar o meu próprio Data helper personalizado que se parece com isso:

     var DateHelper = { addDays : function(aDate, numberOfDays) { aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays return aDate; // Return the date }, format : function format(date) { return [ ("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes ("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes date.getFullYear() // Get full year ].join('/'); // Glue the pieces together } } // With this helper, you can now just use one line of readable code to : // --------------------------------------------------------------------- // 1. Get the current date // 2. Add 20 days // 3. Format it // 4. Output it // --------------------------------------------------------------------- document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20)); 

    Outra opção, usando uma function interna para fazer o preenchimento (mas resultando em um código bastante longo!):

     myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + myDate.getFullYear(); // '12/06/2017' 

    E outro, manipulando strings com expressões regulares:

     var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/'); // '2017/06/12' 

    Mas esteja ciente de que um mostrará o ano no começo e no dia no final .

    Adicione um preenchimento para permitir um zero à esquerda – quando necessário – e concatene-o usando seu delimitador de escolha como string.

     Number.prototype.padLeft = function(base,chr){ var len = (String(base || 10).length - String(this).length)+1; return len > 0? new Array(len).join(chr || '0')+this : this; } var d = new Date(my_date); var dformatted = [(d.getMonth()+1).padLeft(), d.getDate().padLeft(), d.getFullYear()].join('/');