Hur får jag månad och datum i JavaScript i tvåsiffrig form?


När vi anropar getMonth() och getDate() på date-objektet, får vi ensiffrigt nummer. Till exempel:

För january visas 1, men jag behöver visa det som 01. Hur gör man det?

Svar #1

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

för datumet, och liknande:

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

för månaden.

Svar #2

Varför inte använda padStart?

padStart(targetLength, padString) där

  • targetLength är 2
  • padString är 0

// Source: https://stackoverflow.com/a/50769505/2965993

var dt = new Date();

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

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

Detta kommer alltid att returnera tvåsiffriga nummer även om månaden eller dagen är mindre än 10.

Anteckningar:

  • Detta kommer bara att fungera med Internet Explorer om js-koden transpileras med Babel.
  • getFullYear() returnerar det fyrsiffriga året och kräver inte padStart.
  • getMonth() returnerar månaden från 0 till 11.

    • 1 läggs till månaden innan utfyllnad för att hålla den mellan 1 och 12.
  • getDate() returnerar dagen från 1 till 31.

    • Den sjunde dagen kommer att returnera 07 och därför behöver vi inte lägga till 1 innan vi fyller strängen.

Svar #3

Om du vill ha ett format som "YYYY-MM-DDTHH:mm:ss", då kan detta vara snabbare:

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

Eller det vanligt använda MySQL-datumtidsformatet "YYYY-MM-DD HH:mm:ss":

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

Svar #4

Exempel för månad:

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

Du kan också utöka Date-objektet med en sådan funktion:

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

Svar #5

Det bästa sättet att göra detta är att skapa din egen enkla formatterare (som nedan):

getDate() returnerar dagen i månaden (från 1-31)
getMonth() returnerar månaden (från 0-11) < nollbaserad, 0=januari, 11=december
getFullYear() returnerar året (fyra siffror) < använd inte getYear()

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

Svar #6

Jag skulle göra detta:

var date = new Date(2000, 0, 9);
var str = new Intl.DateTimeFormat('en-US', {
  month: '2-digit',
  day: '2-digit',
  year: 'numeric'
}).format(date);

console.log(str); // prints "01/09/2000"

Svar #7

Följande används för att konvertera db2-datumformat, dvs YYYY-MM-DD, med hjälp av ternär operator

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

Relaterade artiklar