web-dev-qa-db-fra.com

Javascript ajouter des zéros au début

J'ai créé ce script pour calculer la date 10 jours à l'avance au format jj/mm/aaaa:

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

J'ai besoin que la date apparaisse avec des zéros au début du mois et du jour en ajoutant ces règles au script. Je n'arrive pas à le faire fonctionner.

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

et

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

Si quelqu'un pouvait me montrer où insérer ces éléments dans le script, je vous en serais très reconnaissant.

379
Julian Coates

Essayez ceci: 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();

EDIT:

Pour expliquer, .slice(-2) nous donne les derniers deux caractères de la chaîne.

Donc, peu importe le problème, nous pouvons ajouter "0" au jour ou au mois, et demander simplement les deux derniers, car ce sont toujours les deux que nous voulons.

Donc, si la MyDate.getMonth() retourne 9, elle sera:

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

donc ajouter .slice(-2) sur qui nous donne les deux derniers caractères qui est:

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

Mais si MyDate.getMonth() retourne 10, ce sera:

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

donc ajouter .slice(-2) nous donne les deux derniers caractères, ou:

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

Voici un exemple tiré de documents d'objet Date sur le réseau de développeurs Mozilla à l'aide d'une fonction "pad" personnalisée, sans avoir à étendre le prototype Javascript de Number. La fonction pratique qu'ils donnent à titre d'exemple est

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

Et ci-dessous est-il utilisé dans le contexte.

/* 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
97
Alex Ross

Vous pouvez définir une fonction "str_pad" (comme dans php):

function str_pad(n) {
    return String("00" + n).slice(-2);
}
41
joan16v

Pour ce faire, la nouvelle méthode moderne consiste à utiliser toLocaleDateString , car elle vous permet non seulement de formater une date avec la localisation appropriée, vous pouvez même passer des options de formatage pour archiver le résultat souhaité:

var date = new Date(2018, 2, 1);
var result = date.toLocaleDateString("en-GB", { // you can skip the first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
});
console.log(result);

Lorsque vous ignorez le premier argument, il détectera la langue du navigateur. De plus, vous pouvez aussi utiliser 2-digit pour l’année.

Si vous n'avez pas besoin de supporter les anciens navigateurs comme IE10, c'est la manière la plus propre de faire le travail. IE10 et les versions inférieures ne comprendront pas l'argument des options.

21
modiX

Pour vous, les gens du futur (ECMAScript 2017 et au-delà)

Solution

"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

Explication

le String.prototype.padStart(targetLength[, padString]) ajoute autant que possible padString dans la cible String.prototype de sorte que la nouvelle longueur de la cible soit targetLength.

Exemple

"use strict"

let month = "9"

month = month.padStart(2, 0) // "09"

let byte = "00000100"

byte = byte.padStart(8, 0) // "00000100"
19
Amin NAIRI
Number.prototype.padZero= function(len){
 var s= String(this), c= '0';
 len= len || 2;
 while(s.length < len) s= c + s;
 return s;
}

//utilisé:

(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
*/
11
kennebec
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();
7
meaa

J'ai trouvé le moyen le plus court de le faire:

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

ajoutera des zéros à tous les chiffres isolés, à un chiffre

6
Povesma Dmytro

Simplifiez-vous la vie et utilisez Moment.js quelques exemples de code:

var beginDateTime = moment()
  .format('DD-MM-YYYY HH:mm')
  .toString();

// Now will print 30-06-2015 17:55
console.log(beginDateTime);
3
Gonzalo Bahamondez
function formatDate(jsDate){
  // add leading zeroes to jsDate when days or months are < 10.. 
  // i.e.
  //     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();
}
3
Alex

Vous pouvez utiliser l'opérateur ternaire pour formater la date comme une déclaration "if".

Par exemple:

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();

Alors

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

serait semblable à une instruction if, où si getDate () renvoie une valeur inférieure à 10, renvoyer un '0' + la date ou bien renvoyer la date si elle est supérieure à 10 (car nous n'avons pas besoin d'ajouter l'élément principal). 0) Idem pour le mois.

Edit: oublié que getMonth commence par 0, nous avons donc ajouté le +1 pour en rendre compte. Bien sûr, vous pouvez aussi simplement dire d.getMonth () <9:, mais je pensais que le +1 contribuerait à la rendre plus facile à comprendre.

3
Hellojeffy

Vous pouvez fournir des options en tant que paramètre pour formater la date. Le premier paramètre concerne les paramètres régionaux dont vous n'avez peut-être pas besoin et le second les options. Pour plus d'informations, visitez https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

var date = new Date(Date.UTC(2012, 1, 1, 3, 0, 0));
var options = { year: 'numeric', month: '2-digit', day: '2-digit' };
console.log(date.toLocaleDateString(undefined,options));
2
MJ55

J'ai enveloppé la bonne réponse de cette question dans une fonction qui peut ajouter plusieurs zéros non significatifs, mais qui par défaut ajoute 1 zéro.

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));
}

pour travailler avec des nombres uniquement et pas plus de 2 chiffres, c’est aussi une approche:

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

Une autre option, utilisant une fonction intégrée pour faire le remplissage (mais avec un code assez long!):

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

// '12/06/2017'

Et un autre, manipulant des chaînes avec des expressions régulières:

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

// '2017/06/12'

Mais sachez que l'on affichera l'année au début et le jour au fin.

1
joeytwiddle

Comme le suggère @John Henckel, commencer à utiliser la méthode toISOString () facilite les choses

const dateString = new Date().toISOString().split('-');
const year = dateString[0];
const month = dateString[1];
const day = dateString[2].split('T')[0];

console.log(`${year}-${month}-${day}`);
0
user615274

Ce que je voudrais faire, c'est créer mon propre assistant Date personnalisé qui ressemble à ceci:

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));

(voir aussi ce violon )

0
John Slegers

Ce qui suit a pour but d’extraire la configuration, d’accrocher Date.protoype et d’appliquer la configuration.

J'ai utilisé un Array pour stocker des fragments de temps et lorsque je Push()this en tant qu'objet Date, il me renvoie la longueur à parcourir. Quand j'ai terminé, je peux utiliser join sur la valeur return.

Cela semble fonctionner assez vite: 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();

démo: http://jsfiddle.net/tive/U4MZ3/

0
Tim Vermaelen
 let date = new Date();
 let dd = date.getDate();//day of month

 let mm = date.getMonth();// month
 let yyyy = date.getFullYear();//day of week
 if (dd < 10) {//if less then 10 add a leading zero
     dd = "0" + dd;
   }
 if (mm < 10) {
    mm = "0" + mm;//if less then 10 add a leading zero
  }
0
Deaner

Ajoutez du rembourrage pour permettre un zéro non significatif - le cas échéant - et concaténez en utilisant le délimiteur de votre choix sous forme de chaîne.

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('/');
0
TV-C-15

En ajoutant à la réponse @modiX, c’est ce qui fonctionne ... NE LAISSEZ QUE comme vide

today.toLocaleDateString("default", {year: "numeric", month: "2-digit", day: "2-digit"})
0
francis