Comment obtenir le mois et la date de JavaScript au format à 2 chiffres?


Réponses:


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

pour la date, et similaire:

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

pour le mois.


86
Cool, mais: function addZ(n){return n<10? '0'+n:''+n;}est un peu plus générique.
RobG

9
slice est intelligent, mais il est beaucoup plus lent qu'une simple comparaison: jsperf.com/slice-vs-comparison
dak

30
@dak: Et quand cela va-t-il réellement être important? Je doute que vous calculiez le mois des milliers de fois par seconde.
Sasha Chedygov

2
@ KasperHoldum– getMonthet getDaterenvoie des nombres, pas des chaînes. Et si la compatibilité avec Strings est requise, alors '0' + Number(n)fera le travail.
RobG

9
@Sasha Chedygov sûr que vous pourriez calculer le mois des milliers de fois par seconde, en particulier si vous
triez

87

Si vous voulez un format comme "AAAA-MM-JJTHH: mm: ss", cela peut être plus rapide:

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

Ou le format de datetime MySQL couramment utilisé "AAAA-MM-JJ HH: mm: ss":

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

J'espère que ça aide


1
C'est la solution la plus simple que j'ai rencontrée. Le seul problème ici est celui du décalage du fuseau horaire.
Praym

3
Le décalage du fuseau horaire peut être pris en charge avec quelque chose comme: var date = new Date (new Date (). GetTime () - new Date (). GetTimezoneOffset () * 60 * 1000) .toISOString (). Substr (0,19) .replace ('T', '');
Praym

Praym, votre code fonctionne pour moi, mais le copier-coller doit avoir un caractère caché ou quelque chose, donc je l'ai simplement tapé à la main.
spacebread

Je me suis retrouvé sur cette question en essayant de résoudre ce problème exact, donc il se trouve que votre réponse est ce dont j'avais besoin.
Ingénieur Toast

Notez que cette méthode renverra la date et l'heure en fonction du fuseau horaire UTC.
Amr

41

Exemple pour le mois:

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

Vous pouvez également étendre un Dateobjet avec une telle fonction:

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

4
Notez que getMonth renvoie un nombre compris entre 0 et 11, pas 1 et 12.
Salman A

4
Cela renvoie des résultats incohérents. Pour novembre et décembre, il renvoie une chaîne et pour les autres mois, il renvoie un nombre.
Tim Down

J'ai mis à jour le code pour implémenter Salman Un avertissement que getMonth est basé sur zéro au lieu de 1. Et ajouté des guillemets pour s'assurer qu'une chaîne est toujours renvoyée.
Jan Derk

23

La meilleure façon de le faire est de créer votre propre formateur simple (comme ci-dessous):

getDate()retourne le jour du mois (de 1-31)
getMonth()retourne le mois (de 0-11) <base zéro, 0 = janvier, 11 = décembre
getFullYear() retourne l'année (quatre chiffres) < ne pas utilisergetYear()

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

20

Pourquoi ne pas utiliser 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);

Cela renverra toujours des nombres à 2 chiffres même si le mois ou le jour est inférieur à 10.

Remarques:

  • Cela ne fonctionnera avec Internet Explorer que si le code js est transpilé à l'aide de babel .
  • getYear()renvoie l'année à partir de 1900 et ne nécessite pas padStart.
  • getMonth() renvoie le mois de 0 à 11.
    • 1 est ajouté au mois avant le rembourrage pour le garder 1 à 12
  • getDate() renvoie le jour de 1 à 31.
    • le 7ème jour reviendra 07et nous n'avons donc pas besoin d'ajouter 1 avant de remplir la chaîne.

1
Ouaip. Il est inclus dans le lien MDN ci-dessus. Si vous utilisez babel pour transpiler, vous ne devriez pas avoir de problème.
SomeGuyOnAComputer

10

Ce qui suit est utilisé pour convertir le format de date db2, c'est-à-dire AAAA-MM-JJ en utilisant l'opérateur ternaire

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

7

Je ferais ceci:

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


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

6

Juste un autre exemple, presque un paquebot.

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


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

5

Si cela pouvait me faire gagner du temps, je cherchais à obtenir:

YYYYMMDD

pour aujourd'hui, et s'entendait avec:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');

2
La réponse est claire. Pour DD/MM/YY, je suis allé ànew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma

4

C'était ma solution:

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;


3

Pas une réponse mais voici comment obtenir le format de date dont j'ai besoin dans une 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);

J'espère que cela t'aides!


2

Conseil 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/


2

new Date().getMonth() retourne le mois sous forme de nombre (0-11)

Vous pouvez facilement corriger le numéro du mois avec cette fonction.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}

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

1

Et une autre version ici https://jsfiddle.net/ivos/zcLxo8oy/1/ , espérons être utile.

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

1

Les réponses ici ont été utiles, mais j'ai besoin de plus que cela: pas seulement le mois, la date, le mois, les heures et les secondes, pour un nom par défaut.

Fait intéressant, bien que le préfixe "0" soit nécessaire pour tout ce qui précède, "+ 1" n'était nécessaire que pour le mois, pas pour les autres.

Comme exemple:

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

0

Ma solution:

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

Usage:

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

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


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

0

si vous voulez que la fonction getDate () retourne la date à 01 au lieu de 1, voici le code pour cela .... Supposons que la date d'aujourd'hui est le 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

0

Je voulais faire quelque chose comme ça et c'est ce que j'ai fait

ps je sais qu'il y a de bonnes réponses en haut, mais je voulais juste ajouter quelque chose de moi ici

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

Trop d'effort. N'est-ce pas?
ahmednawazbutt

0

Si vous cochez moins de 10 , vous ne devez pas créer de nouvelle fonction pour cela. Attribuez simplement une variable entre parenthèses et renvoyez-la avec l'opérateur ternaire.

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`

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

0

Je vous suggère d'utiliser une autre bibliothèque appelée Moment https://momentjs.com/

De cette façon, vous pouvez formater la date directement sans avoir à faire de travail supplémentaire

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

Assurez-vous d'importer le moment également pour pouvoir l'utiliser.

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

J'espère que cela vous aidera: D


1
Moment.js a déjà été suggéré; mais vos conseils sont toujours complets et utiles.
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);
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.